从没有强制转换

时间:2017-08-09 03:56:42

标签: c string pointers

我正在编写一个代码,该代码将从stdin中检索一个单词和一个文本,并检查该单词是否出现在文本中。到目前为止,这是我的代码,但是当我编译代码时,它会在下面产生错误。

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

int main(int argc, char* argv[])
{
    char censor[] = "CENSORED";
    char input[1028];

    for(int i = 1; i < argc; i++){
        if(strstr(input, argv[i]) != NULL){
            for(int j = 0; j < strlen(input); j++){
                if(strcmp(input[j], argv[i]) == 0){
                    input[j] = censor;
                }
            }
        }
    }

    printf("%s", input);
    printf("\n");
}
  

censored.c:在函数'main'中:censored.c:13:15:警告:传递   'strcmp'的参数1在没有强制转换的情况下从整数中生成指针   [-Wint转换]            if(strcmp(input [j],argv [i])== 0){                      ^在censored.c中包含的文件:3:0:/usr/include/string.h:140:12:注意:预期'const char *'但是   参数的类型为'char'extern int strcmp(const char * __ s1,const   char * __ s2)                   ^ censored.c:14:15:警告:赋值在没有强制转换的情况下从指针生成整数[-Wint-conversion]             输入[j] =审查员;

我不确定为什么他们认为char数组是整数,请帮忙,谢谢!

2 个答案:

答案 0 :(得分:1)

正如错误所示,您的代码中存在两个问题。

  1. 在第13行:input [j]是一个字符,我们应该传递char *,如&amp; input [j]或(input + j)或输入。

  2. 第14行:您不能通过&#34; =&#34;直接将一个字符串复制到其他字符串。

  3. 您可以参考以下代码了解您的功能。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main(int argc, char* argv[])
    {
        char censor[] = "CENSORED";
        char word[] = "bad_word";
        char input[1028];
        /* added logic code */
        for(int i = 1; i < argc; i++) {
                /* compare if this is bad word */
                if(strcmp(argv[i], word) == 0) {
                        // found bad_word
                        //replace with censor
                        strcat(input, censor);
                        strcat(input, " ");
                } else {
                        // no bad word, we can go with the same
                        strcat(input, argv[i]);
                        strcat(input, " ");
                }
        }
        printf("%s", input);
        printf("\n");
    }
    

    所以从终端运行你的代码

    ./a.out I found bad_word and this is bad_word
    

    它将输出为

    I found CENSORED and this is CENSORED
    

答案 1 :(得分:0)

在你的错误中提到你提到的是传递char而不是const char *, 注意:预期'const char *'但参数的类型为'char'extern int strcmp

这里char输入[1028];是一个字符数组。所以你需要传递数组索引的地址,即输入[j]而不是输入[j]。

strcmp(&amp; input [j],argv [i])应该代替

strcmp(input [j],argv [i])

注意:这里argv [i]是char *的数组,所以你不需要将它作为&amp; argv [i]传递。如果你提到数组索引,那么你需要添加&amp;传递它的地址。如果你传递的数组没有提到索引,即你的情况下strcmp(输入,argv [i])那么它将传递输入地址[0]