Strcmp和getchar
我已经写了一个小c程序,显示输入的文本,如果输入的文本是“显示版本”,它会显示版本。 下面是示例代码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
#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
是)?