sscanf的行为是不同的

use*_*520 -2 c scanf

#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失败以及为什么它无法检索最后一个变量?

Ant*_*ala 7

%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表示第二次转换后匹配失败.