我正在编写一种方法来解析特定格式的字符串,"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);
由于某种原因,它没有正确解析字符串,我不知道为什么。
答案 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和编译器?你对我展示的代码有什么看法?