#include <stdio.h>
int main()
{
char * msg = "Internal power 10. power sufficient. total count 10";
char * temp = "Internal power %d. power %s. total count %d";
int v1, v2, ret;
char str1[64];
ret = sscanf(msg, temp, &v1, str1, &v2);
printf("%d\n", ret);
printf("%d %s %d ", v1, str1 , v2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想了解为什么sscanf失败以及为什么它无法检索最后一个变量?
%s读取以空格分隔的字符串; 也就是说,它sufficient.在点到时消耗,格式". total count %d"的其余部分与剩余部分不匹配" total count 10".
由于您希望跟随该单词.,因此您最好使用%63[^.]最多63个不包含点的字符.或者%63[a-z]最多63个ASCII小写字母 - 明确指定宽度也可以确保不会发生缓冲区溢出:
char * temp = "Internal power %d. power %63[^.]. total count %d";
Run Code Online (Sandbox Code Playgroud)
PS总是检查返回值*scanf- 它告诉匹配了多少个说明符(在这种情况下它应该是3); 但是,现在返回2表示第二次转换后匹配失败.