我有一个包含此格式数据的文件:
1 Jake 234 Ruby 98。
我想使用sscanf
只将字符串读入数组,所以我尝试了这个:
male[i] = malloc(100);
female[i] = malloc(100);
sscanf(str, "%*d%s%*d%s%*d", &male[i], &female[i]);
问题是当i = 0
时,函数会跳过第一个字符串和第一个整数。因此,当我尝试打印&male[0]
时,我会得到一个空白区域。
我已将i
初始化为0
。有人可以指出我可能出错的地方吗?
非常感谢!
答案 0 :(得分:3)
使用male[i]
而不是&male[i]
。
将字符串输入限制为99(比缓冲区空间大1小1)
检查sscanf()
最后"%*d"
没有做任何事情。
-
char *male[N]; // assumed sample declaration
char *female[N];
male[i] = malloc(100);
female[i] = malloc(100);
int cnt = sscanf(str, "%*d%99s%*d%99s", male[i], female[i]);
if (cnt == 2) Success();
如果你想确保解析所有数据并且最后没有非白色空间....
int n = 0;
int cnt = sscanf(str, "%*d%99s%*d%99s%*d %n", male[i], female[i], &n);
if (cnt == 2 && str[n] == '\0') Success();