【发布时间】:2013-08-26 10:35:48
【问题描述】:
我在我的项目中使用 sscanf 将字符串从源缓冲区复制到目标缓冲区。 例如:
char* target;
target = (char*)malloc(100 * sizeof(char));
char* source = "Hello World";
sscanf(source, "%[^\t\n]", target); // trying to copy "Hello World" into target.
printf("%s\n", target);//this will print "Hello World".
但是这种编码方式是不被接受的。我的经理希望我做的事情是这样的:
sscanf(source, "%11[^\t\n]", target); // NOTE: I've written "%11". here, 11 == length of hello world.
也就是说,他希望我也提供格式说明符。 (在这种情况下为 %11)。
但是,问题在于源的长度可能不同,我不知道如何为每个不同长度的字符串编写正确的格式说明符。
【问题讨论】:
-
你考虑过 strtok() 吗?
-
控制字符串只是一个字符串。您可以计算字符数,然后组装适当的控制字符串。
-
Please don't cast the return value of
malloc()in C。另外,不要使用sizeof (char),它总是1,只会增加混乱。 -
我对C不太了解。加上字符串的大小有什么区别?
-
@Neil Kirk 如果我 grok 您的评论:在 "%11[^\t\n]" 中添加 "11" 会限制
char的最大数量在target作为source可能比目的地的容量大得多。
标签: c++ c scanf format-specifiers