获取sscanf读过多少个字符? (%N)

时间:2013-06-12 22:11:39

标签: c scanf

我有一个字符串结构,例如“[first something] = [second something”]

我认为sscanf是一种分离它们的方式!

但是,扫描从不使用%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

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

(是的,我知道这会让我们容易出现缓冲区溢出错误 - 这在代码的早期就已经过了...)

1 个答案:

答案 0 :(得分:2)

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);