gpt4 book ai didi

c - sscanf 行为不同

转载 作者:行者123 更新时间:2023-11-30 19:53:46 26 4
gpt4 key购买 nike

#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;
}

我想了解为什么 sscanf 失败以及为什么它无法检索最后一个变量?

最佳答案

%s 读取空格分隔的字符串;也就是说,它消耗足够的。当它到达点时,格式的其余部分,“。总计数%d”与其余部分不匹配“总计数 10”

由于您希望该单词后跟 .,因此您也可以使用 %63[^.],即最多 63 个字符不包含点。或者 %63[a-z] 最多 63 个 ASCII 小写字母 - 显式指定宽度还可以确保不会发生缓冲区溢出:

char * temp = "Internal power %d. power %63[^.]. total count %d";

附注始终检查 *scanf 的返回值 - 它告诉有多少个说明符被匹配(在本例中应该是 3);但是,现在返回了2,意味着第二次转换后匹配失败。

关于c - sscanf 行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43511349/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com