sscanf获取剩余字符串的值
我有一个字符串,看起来像这样:sscanf获取剩余字符串的值,c,arrays,string,char,scanf,C,Arrays,String,Char,Scanf,我有一个字符串,看起来像这样: "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
"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的方法呢?您可以对整个
无符号字符类型使用scanset:
char message[MESSAGE_SIZE], response[RESPONSE_SIZE];
int status;
*response = '\0';
sscanf(str, "%s %d %[\001-\377]", message, &status, response);
另外,您应该始终检查sscanf
中的返回值。如果数字后只有空格,第三个说明符将不匹配任何内容,sscanf
将返回2
,而响应保持不变。第%n个说明符将捕获扫描中使用的字符数。这应该获得扫描第一个值时使用的字符数,然后从该索引中获取strcpy
int used;
sscanf (str, "%s %d %n", message, &status, &used);
strcpy ( response, &str[used]);
现在,您已经通过使用%s%d%[^\0]“
达到了目标,您现在的问题是什么?没有达到我的目标,响应没有所需的值。响应应该是“Now some random text\n Now more text\t\t”,在我的计算机上没有HELLO和状态代码,Response
正好是“Now some random text\n Now more text\t\t”在我的GCC 5.3计算机上没有。0@sunqingyao这似乎令人费解,但一旦你想一想,就会明白了sscanf
读取格式字符串(第一个参数),直到出现NUL终止符('\0'
)。在%s%d%[^\0]“
的情况下,字符串中嵌入了一个\0
。这就解释了第二个警告<因此,code>sscanf
只能看到%s%d%[^”
。现在您将了解第一个警告。我不知道该字符串是否调用未定义的行为。因此,与此相关。