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吗?
您可以将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不变.
%n说明符将捕获扫描中使用的字符数.这应该得到扫描第一个值然后从该索引strcpy使用的字符数.
int used;
sscanf (str, "%s %d %n", message, &status, &used);
strcpy ( response, &str[used]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
816 次 |
| 最近记录: |