2013-08-02 71 views
2

我是C新手,对于如何通过字符数组使用字符串仍然有点困惑。C - 比较字符串文字和字符数组

在我的C程序,我接受来自用户的命令:

char command[20]; 
scanf("%s",command); 

当然,后来我想弄清楚他们的命令输入(类似“如果(命令==‘你好’ ),然后做点什么“)。我知道这在C中是不可能的,因为我将一个字符串文字与一个字符数组进行比较,但是对它有什么好的方法呢?我曾尝试使用strcmp(命令,“你好”),仍然有错误。

任何建议,你可以提供将非常感激。谢谢!

+2

究竟是什么“错误”呢? 'strcmp()'是要走的路。 – 2013-08-02 21:33:28

+0

另外,我在代码中看到的最糟糕的错误是使用'scanf()'。完全忘记那个功能。您正在寻找'fgets(command,sizeof command,stdin)'而不是。 – 2013-08-02 21:34:03

+0

(不使用scanf的主要原因是:扫描的次数没有限制,如果用户输入21个字符会怎么样?) –

回答

2

当字符串相同时,strcmp返回0。我有使用strcmp比较字符数组与字符串文字的代码,当它不工作时我非常困惑。事实证明,假设它在字符串相同的情况下返回1是错误的!

也许你犯了同样的错误?

+2

事实上,做出假设是编写程序的不正确方式 - 应该改为阅读文档。 – 2013-08-02 21:37:09

0

当谈到C中的字符串时,它通常采用两种形式:1.字符数组,2.字符指针。大多数时候,它们是可以互换的。例如:

char *cmd_ptr = "command1"; 
char cmd_array[20] = "command2"; 
printf ("cmd1: %s cmd2: %s\n", cmd_ptr, cmd_array); 

用于上述定义中的主要区别在于,为cmd_ptr你不能改变它的内容,例如为cmd_ptr[0] = 'a';cmd_array你可以在阵列中的改变的任何元件。

但是你可以做cmd_ptr = cmd_array;然后你可以通过cmd_ptr进行更改,因为它指向与cmd_array相同的位置。

2

我写的什么,我认为你正在做一个完整的版本:

#include <string.h> 
    void main() 
    { 

     char command[20]; 
     scanf("%s",command); 

     // command and "hello" can be less than, equal or greater than! 
     // thus, strcmp return 3 possible values 
     if (strcmp(command, "hello") == 0) 
     { 
      printf("\nThe user said hello!"); 
     } 

    } 

几个人评论了关于使用scanf,他们是正确的,只是一个新的程序员在学习开始的地方这东西,所以不觉得太糟糕,我们都在学习...

希望这会有所帮助。

+0

是的,你没事。问题是我认为strcmp只是一个布尔函数,实际上它返回3个可能的值。一旦我更熟悉它,我会试着使用fgets。我使用scanf的原因是我需要读取用户输入的命令,直到第一个空格(不是整行,因为我需要每行读取两个命令)。一旦我弄清楚如何通过fgets来控制我正在阅读的内容,我一定会使用它。感谢fgets的建议,并且非常感谢大家提供的全面解答!你是如此的乐于助人! – Irina

+0

你介意upvoting有用的答案,并选择一个作为正确的答案? – gravitas

+0

RSinghS - 我已经尝试过,但我需要有15个声望才能答复答案。一旦我能够,我一定会提供有用的答案! :) – Irina