0

我有一个结构如 "[first something]=[second something"] 的字符串

我认为 sscanf 将是一种将它们分开的方法!

但是,scan 永远不会使用 %n 正确报告偏移量。

这行代码非常类似于:

char data[100];
char source[] = "username=katy"
int offset=-1;
sscanf([source],"%[^=],%s%n",data,&offset)
printf("sscanf is reporting %s with an offset of %i\n"

)

但输出总是看起来像:

sscanf is reporting username with an offset of -1

有人可以为我解决这个问题吗?

(是的,我知道这会让我们容易出现缓冲区溢出错误——这在代码中稍早一点的时候就被证明了......)

4

1 回答 1

3

格式字符串中的逗号scanf没有意义。而不是"%[^=],%s%n",尝试"%[^=]=%s%n"。您还应该对两个字符串设置字段宽度限制,否则您可能会溢出目标缓冲区,并且您传递的参数太少sscanf(只有一个字符串,而不是另一个)。

代码的更正版本可能如下所示:

char key[100], data[100];
char source[] = "username=katy"
int offset=-1;
sscanf(source,"%99[^=]=%99s%n",key,data,&offset)
printf("sscanf is reporting %s with an offset of %i\n", data, offset);
于 2013-06-12T22:14:11.957 回答