我试图创建一个基于 C 的字符串菜单,用户输入一个命令,然后运行一段代码。
无论我做什么,条件都不是真的:
char *input= "";
fgets(input, 50, stdin);
printf("%s",input);
printf("%d",strcmp( input,"arrive\0"));
if(strcmp( input,"arrive\0")==0){....
我对 c 相当陌生,我发现字符串真的很烦人。
我究竟做错了什么?
注意:当前代码使我的程序崩溃:(
最佳答案
为什么 strcmp 总是返回非 0:strcmp
只有在字符串相同时才会返回 0。至于为什么它总是评估不同。这是因为 fgets 在空终止之前在输入缓冲区的末尾放置了一个换行符。
/*Will print 0 if you type in arrive<enter>*/
printf("%d",strcmp( input,"arrive\n"));
程序崩溃的原因:
另一个问题是
input
应该是一个字符缓冲区。像这样:char input[1024];
目前你有 input
作为指向空终止字符串的指针(这是只读内存)友情建议:
也不要将空终止
\0
放在字符串文字中。当您使用字符串文字时,它会自动隐含。就 strcmp
而言,双空终止并不重要,但它可能会在您 future 的程序中的其他地方引起问题。人们会想知道为什么要进行双空终止。