【发布时间】:2016-05-08 05:16:27
【问题描述】:
我有一个如下所示的字符串:
"HELLO 200 Now some random text\n now more text\t\t"
我尝试获取 HELLO、200 和剩余的字符串。不幸的是,字符串可能包含\n 和\t,所以我不能使用%[^\n\t]。
我尝试了以下方法:
char message[MESSAGE_SIZE], response[RESPONSE_SIZE];
int status;
sscanf (str, "%s %d %[^\0]", message, &status, response);
之后的变量是:
message = "HELLO", status = 200, response = "HELLO 200 Now some random text\n now more text\t\t"
有没有办法不用strtok?
【问题讨论】:
-
现在您已经通过使用
"%s %d %[^\0]"实现了目标,您现在有什么问题? -
没有达到我的目标,响应没有期望的值。响应应该是“现在一些随机文本\n 现在更多文本\t\t”,没有 HELLO 和状态码
-
在我的电脑上,
response正好是“No some random text\n now more text\t\t” -
不在我的 GCC 5.3.0 机器上
-
@sunqingyao 这可能看起来很令人费解,但仔细想想就会明白。
sscanf读取格式字符串(第一个参数),直到出现 NUL 终止符 ('\0')。对于"%s %d %[^\0]",字符串中嵌入了\0。这解释了第二个警告。sscanf因此只能看到"%s %d %[^"。现在您将了解第一个警告。我不知道该字符串是否会调用未定义的行为。所以,I've asked a question 与此相关。
标签: c arrays string char scanf