为什么strcmp告诉我一个变量是一个整数,当它不是

时间:2017-07-21 22:06:11

标签: c

我有一个编译错误,经过几个小时的研究后我发现它试图告诉我我的var"是整数类型,但在我的代码中我将输出设置为字符串。我不明白问题出在哪里我只想要一个程序来收集一个单词在一个句子中的次数。

#include <stdio.h>
#include <string.h>

int j = 0;

int cadena(char ciudad[50], char letra[2]) {
    int i;

    for (i = 0; i < strlen(ciudad); i++)
        if (strcmp(ciudad[i], letra) == 0);
            j += 1;

    return j;
}

int main() {
    char ciudad_1[50];
    char letra_1[2];

    printf("Dame tu ciudad: ");
    gets(ciudad_1);
    printf("Dame la letra la cual quieres contar: ");
    scanf("%s", letra_1);

    printf("Esta son las veces que se repite tu letra %d", cadena(ciudad_1, letra_1));
    return 0;
}

正如您所看到的,gets(ciudad_1); char ciudad_1[50]被设置为字符串,这是我收到这些错误的原因。

编译错误如下:

pag_113.c: In function 'cadena':
pag_113.c:11:3: warning: passing argument 1 of 'strcmp' makes pointer from integer without a cast [enabled by default]
In file included from pag_113.c:2:0:
c:\pentestbox\base\ruby_devkit\mingw\bin\../lib/gcc/i686-w64-mingw32/4.7.2/../../../../i686-w64-mingw32/include/string.h:53:15: note: expected 'const char *' but argument is of type 'char'
谢谢你们的时间,我真的希望能解决这个新手问题。

2 个答案:

答案 0 :(得分:2)

strcmp期望它的char *类型的参数都是ciudad[i]类型为char

答案 1 :(得分:2)

!DOCTYPE html> <html ng-app="app"> <head> <meta charset="utf-8"> <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> <link href="https://code.ionicframework.com/1.0.0/css/ionic.min.css" rel="stylesheet"> <script src="https://code.ionicframework.com/1.0.0/js/ionic.bundle.js"></script> </head> <body ng-app="app"> <ion-pane> <ion-header-bar class="bar-stable"> <h1 class="title">Awesome App</h1> </ion-header-bar> <ion-content class="padding" ng-controller="exampleController"> <button class="button button-assertive" ng-click="getData()">click</button> <br> MESSAGE: {{message}} <br> Date: {{Date}} </ion-content> </ion-pane> </body> </html>功能存在多个问题:

  • enter code here 用于比较函数中的C字符串,以便比较单个字符。您可以使用数组元素上的cadena运算符执行此操作。

  • 您应该将计数器变量置于函数的本地,而不是全局。

  • strcmp()语句==在行尾有一个虚假if:这是一个空语句。 if (strcmp(ciudad[i], letra) == 0);语句将无条件执行。

以下是更正后的版本:

;

另请注意,您不应使用j += 1;。此函数已从最新的C标准库中删除,因为它无法安全使用,因为目标数组的大小无法传递给函数,因此足够长的输入肯定会导致缓冲区溢出。请改用int cadena(char ciudad[50], char letra[2]) { int i; int count = 0; for (i = 0; i < strlen(ciudad); i++) if (ciudad[i] == letra[0]) count += 1; return count; } gets()

这是一个更简单的版本:

fgets()