【发布时间】:2016-11-14 16:43:27
【问题描述】:
void viewonechar(){
char name[25], c[25];
int n;
fp = fopen("Phonebook.txt","r");
printf ("\n\n Enter Character : ");
scanf ("%s",c);
fscanf (fp, "%s %d", name, &n);
while (!feof(fp)){
if ((strcmp(c, name[0])) == 0){ \\ Warning in here
printf (" %s +880%d\n",name, n);
}
fscanf (fp, "%s %d", name, &n);
}
printf ("\n\n");
fclose(fp);
menu();
}
当我编译代码时,在标记的行上会出现这个警告,“传递 strcmp 的参数 2 使指针从整数而不进行强制转换”。我到底做错了什么?
【问题讨论】:
-
如果
name是一个char[25]数组,你认为name[0]是什么?strcpy需要const char*作为第二个参数;name[0]不是那个。 -
请注意,错误消息显示“整数”而不是
int。char类型(即每个数组元素)是整数类型。 -
你想比较什么?只有名称的第一个字符和 c?
if (name[0] == c[0]) {...呢?或从 c 到名称开头的所有字符if (strncmp(c, name, strlen(c)) == 0) {... -
旁白:
while (!feof(fp)){==>while (fscanf (fp, "%s %d", name, &n) == 2){并删除另外两个fscanf语句。循环最好通过测试正确转换来控制。 -
使用 -Wall -Wextra -Werror 等完整标志进行编译也是一个好习惯,因为您会看到到底有什么问题
标签: c