传递strcmp的参数2使得指针来自整数而没有强制转换

时间:2016-11-14 16:43:27

标签: c

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使得指针来自整数而没有强制转换”。我究竟做错了什么?

2 个答案:

答案 0 :(得分:1)

  

int strcmp(const char * str1,const char * str2);

由于namechar的数组,name[0]charstrcmpchar指针作为参数,因此您提供的char被隐式转换为int类型然后 - 指向指针,这会产生未定义的行为,并且很可能会导致段错误。

答案 1 :(得分:1)

有很多问题。

以下代码修复了上述问题:

void viewonechar(void) 
{
    char name[25], c[25];
    int n;

    FILE    fp = fopen("Phonebook.txt","r");

    if (!fp) {
        perror("fopen");
        exit(1);
    }

    printf ("\n\n Enter Character : ");
    if (fgets(c, sizeof c, stdin) == NULL) {
        fprintf(stderr, "Input error\n");
        exit(1);
    }

    while (fscanf (fp, "%24s %d", name, &n) == 2) {
        if (c[0] == name[0]) {
            printf (" %s +880%d\n",name, n);
        }  
    }
    printf ("\n\n");
    fclose(fp);
    menu();
}