【发布时间】:2013-05-17 13:07:38
【问题描述】:
在c编程语言中,占位符“%n”是什么? 以及下面的代码是如何工作的?
char s[150];
gets(s);
int read, cur = 0,x;
while(sscanf(s+cur, "%d%n", &x, &read) == 1)
{
cur+= read;
/// do sth with x
}
-- 此代码获取一行作为字符数组,然后扫描此字符数组中的数字,
例如:如果*s="12 34 567"
第一次x = 12
下次x = 34
终于x = 567
【问题讨论】:
-
有人应该发布一个标准或规范或手册或书籍来解释这样的事情。可惜在地球上的任何地方都找不到。
-
@EricPostpischil 我希望你是在讽刺。
-
我不鼓励使用
gets,就像 C11 标准通过弃用它所做的那样。它引入了缓冲区溢出的问题。您可以改用fgets来修复此错误。此外,忽略任何标准 C 函数 的返回值可能会导致未定义的行为。也许您可以搜索“opengroup fgets”以找到手册,跳到“返回值”部分并编写代码以确保在逻辑继续之前返回值符合预期。您可能会省去很多哭泣和浪费时间!