sscanf获取剩余字符串的值

Mic*_*ner 6 c arrays string scanf char

我有一个看起来像这样的字符串:

"HELLO 200 Now some random text\n now more text\t\t"
Run Code Online (Sandbox Code Playgroud)

我试图获得HELLO,200和剩余的字符串.不幸的是,字符串可能包含\n's和\t's,因此我无法使用%[^\n\t].

我尝试了以下方法:

char message[MESSAGE_SIZE], response[RESPONSE_SIZE];
int status;
sscanf (str, "%s %d %[^\0]", message, &status, response);
Run Code Online (Sandbox Code Playgroud)

之后变量是:

message = "HELLO", status = 200, response = "HELLO 200 Now some random text\n now more text\t\t"
Run Code Online (Sandbox Code Playgroud)

有没有办法没有strtok吗?

chq*_*lie 6

您可以将scanset用于整个unsigned char类型范围:

char message[MESSAGE_SIZE], response[RESPONSE_SIZE];
int status;
*response = '\0';
sscanf(str, "%s %d %[\001-\377]", message, &status, response);
Run Code Online (Sandbox Code Playgroud)

另外,您应该始终检查返回值sscanf.如果数字后面只有空格,则第三个说明符将不匹配任何内容sscanf并将返回2,保持response不变.


use*_*023 6

%n说明符将捕获扫描中使用的字符数.这应该得到扫描第一个值然后从该索引strcpy使用的字符数.

int used;
sscanf (str, "%s %d %n", message, &status, &used);
strcpy ( response, &str[used]);
Run Code Online (Sandbox Code Playgroud)