我正在编写一个代码,该代码将从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数组是整数,请帮忙,谢谢!
答案 0 :(得分:1)
正如错误所示,您的代码中存在两个问题。
在第13行:input [j]是一个字符,我们应该传递char *,如&amp; input [j]或(input + j)或输入。
第14行:您不能通过&#34; =&#34;直接将一个字符串复制到其他字符串。
您可以参考以下代码了解您的功能。
#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]