我有一些代码提示用户读取格式为[name] [someInt]的文件,但不是所有行都有[name]。因此,我将每一行解析为一个字符串数组,如果它的长度为2,那么它有一个名称并执行strcmp来查找匹配项,然后打印出相关的int。但是,我遇到了一些问题
错误:二进制*的操作数无效(有'char *'和'char *')
在printf("%s\n" *ans);
行进行编译时
char * ans = NULL;
//open and read file line by line, below code is in line by line while loop
char ** res = NULL;
char * p = strtok (line, " ");
int n_spaces = 0, i;
while (p) {
res = realloc (res, sizeof (char*) * ++n_spaces);
if (res == NULL) {
exit (-1); /* memory allocation failed */
}
res[n_spaces-1] = p;
p = strtok (NULL, " ");
printf("%d\n", n_spaces);
if(n_spaces == 2 && (strcmp(name,res[0]) == 0)) {
nameMatch = true;
printf("MATCH FOUND!\n");
ans = res[1];
printf("%s\n" *ans);
break;
}
}
答案 0 :(得分:1)
printf("%s\n" *ans);
^
您在这些参数之间缺少逗号。编译器将*
解释为乘法,而不理解你希望它如何乘以两个字符串。
即使有了这个改变,你(可能?)仍然会收到关于类型的警告。完全删除*
;我很确定你想把字符串指针传递给printf
,而不是字符串的第一个字符。
答案 1 :(得分:0)
你告诉res是NULL。那么,在malloc之前你使用realloc?你的错误可能就是这个。
答案 2 :(得分:-1)
printf("%s\n", *ans);
代替printf("%s\n" *ans);