gpt4 book ai didi

c - sscanf() 未正确解析输入行

转载 作者:行者123 更新时间:2023-11-30 17:44:17 24 4
gpt4 key购买 nike

我正在编写一个方法来解析特定格式的字符串,“55555;fhihehj;”

我过去曾使用过 sscanf 来做类似的事情,所以我想为什么不呢。

这是我当前的代码。

char toBreak[] = "55555;fjfjfhhj;";  
char* strNum = malloc(256); //256 * sizeof(char) = 256
char* name = malloc(256);
if (sscanf(toBreak, "%[^;];%[^;];", strNum, name)!=2)
return -1;
printf("%s, %s\n", strNum, name);

由于某种原因,它无法正确解析字符串,我不确定为什么。

最佳答案

将您的可编译代码放入 SSCCE ( Short, Self-Contained, Correct Example ) 中,我们可以得到:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
char toBreak[] = "55555;fjfjfhhj;";
char *strNum = malloc(256);
char *name = malloc(256);
if (sscanf(toBreak, "%255[^;];%255[^;];", strNum, name) != 2)
return -1;
printf("%s, %s\n", strNum, name);
return 0;
}

我添加了 255 来防止在程序中输入不是常量的一般情况下缓冲区溢出。当然,这里的 256 字节分配比所需的要大得多,溢出不是问题。注意长度上的“差一”;格式中的长度不包含空字节,但必须有空字节的空间。

当在带有 GCC 4.8.2 的 Mac OS X 10.9 Mavericks 上编译并运行时,会给出:

55555, fjfjfhhj

您在什么平台上运行 - 操作系统和编译器?通过我展示的代码您会得到什么?

关于c - sscanf() 未正确解析输入行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20041072/

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