我试图创建一个基于 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 的程序中的其他地方引起问题。人们会想知道为什么要进行双空终止。

10-07 19:34
查看更多