我有一个字符串结构,例如“[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
有人可以这么善意为我解决这个问题吗?
(是的,我知道这会让我们容易出现缓冲区溢出错误 - 这在代码的早期就已经过了...)
答案 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);