sscanf()没有正确解析输入行

时间:2013-11-18 05:57:58

标签: c string string-parsing scanf

我正在编写一种方法来解析特定格式的字符串,"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);

由于某种原因,它没有正确解析字符串,我不知道为什么。

1 个答案:

答案 0 :(得分:0)

将您的可编辑代码转换为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

你在运行什么平台 - o / s和编译器?你对我展示的代码有什么看法?