Strcmp和getchar

Strcmp和getchar,c,strcmp,getchar,C,Strcmp,Getchar,我已经写了一个小c程序,显示输入的文本,如果输入的文本是“显示版本”,它会显示版本。 下面是示例代码 #include<stdio.h> #include<string.h> void main(){ int i; char j = (char) i; while(i != '#'){ i = getchar(); if(strcmp(&j, "show version")) printf("v1"); else putchar(i); }} #包括 #包括 v

我已经写了一个小c程序,显示输入的文本,如果输入的文本是“显示版本”,它会显示版本。 下面是示例代码

#include<stdio.h>
#include<string.h>
void main(){
int i;
char j = (char) i;
while(i != '#'){
i = getchar();
if(strcmp(&j, "show version")) printf("v1");
else putchar(i);
}}
#包括
#包括
void main(){
int i;
char j=(char)i;
而(我!='#'){
i=getchar();
如果(strcmp(&j,“显示版本”))打印F(“v1”);
else putchar(一);
}}
它为每个字符+1打印v1。 任何建议。

请阅读

如果两个字符串相等,
strcmp
的返回值为
0
,在C条件下被视为等于false

将if..语句更改为以下内容:

if(strcmp(&j, "show version") == 0) printf("v1");
注意:为了让代码解析字符串,需要将读取的每个字符附加到字符串上

#define LINE_SIZE 512

int main(){
    char *line = malloc(LINE_SIZE);
    while(fgets(line, LINE_SIZE, stdin)) {
        if(strncmp(line, "show version", strlen(line) - 1) == 0) {
            printf("v1\n");
        } else {
            continue;
        }

        break;
    }

    return 0;
}

我之所以使用
strncmp
(而不是
strcmp
)和
strlen(line)-1
,是因为
fgets
在输入时还捕获回车键/换行符。这只是一个例子-别忘了释放你的内存

j
的值未知。。。设置
i
时不会修改它,因为在更改
i
后,不会将
i
分配给
j
。另外,
strcmp()
需要以null结尾的字符串。。。指向单个(可能)非空
字符
的指针是不够的——它将继续读取该字符,直到找到空字符或已确定字符串不匹配为止。换句话说,您有很多未定义的行为,并且似乎对语言的工作方式有一些误解。(这些并不是代码的唯一问题)那么(在原始代码中)
&j
甚至没有引用以null结尾的字符串,并且
j
的值是从未初始化的变量赋值的这一事实呢?或者循环中没有修改
j
(只有
i
是)?