如果条件出现故障,请在里面进行字符串比较

我试图用C编程,但并不成功。 我有一个简单的源代码,我需要匹配if (char)中的多个字母。 它显示以下错误消息(在使用gcc的linux终端中):

main.c:在函数`main’中:main.c:16:23:warning:字符常量对于它的类型太长[默认启用]

if(firstName [20] ==’Vojta’){

源代码:

 #include  int main(int argc, char const *argv[]) { /* code */ char firstName[20]; char lastName[40]; char password[20]; char confpasswd[20]; int age; printf("Please write your first and last name:"); scanf("%s%s", firstName, lastName); printf("%s %s:\n", firstName, lastName); if (firstName[20] == 'Vojta'){ printf("\ncool\n"); } return 0; } 

第1点

使用strcmp()来比较字符串

第2点

更改

 scanf("%s%s", firstName, lastName); 

 scanf("%19s %39s", firstName, lastName); 

并检查scanf()的返回值以确保成功。 但是,如果你单独使用两个scanf()来获取两个输入,这样会更好,这样会容易出错。

另外,作为建议,您可以阅读有关fgets()strtok() ,以便将整行读作输入并标记化所需的部分。

关于这一行:

 if (firstName[20] == 'Vojta'){ 

firstName是一个数组,其值是通过scanf() 。 因此,名字将包含终止NULL char( '\0' )。 因此, firstName的内容,如果用户输入'Vojta'将是'V''o''j''t''a''\0'后跟14个乱码字符。

由于尾部'\0' (由scanf()插入), firstName的内容是一个有效的字符串。

firstName的内容与某些字符串文字进行比较的最佳方法是使用函数strcmp()将其与字符串文字进行比较。

注意:当前代码正在比较firstName的(偏移)20位置(它位于数组的边界之外,因此导致未定义的行为)。

以下是进行字符串比较的正确方法示例:

 if( 0 == strcmp( firstName, "Vojta" ) ) 

请注意字符串文字周围的双引号( " )。

这些双引号使它成为字符串文字,而不仅仅是编译器将评估为“int”值的一堆字符。

注意:单个字符可以通过在每个字符周围使用单引号来表示,如: 'V''o''j''t''a'

strcmp()函数

  1. 如果第一个参数( firstName内容)在第二个参数之前(按字母顺序),则返回< 0
  2. 如果第一个参数( firstName内容)在第二个参数之后(按字母顺序排列),则返回> 0
  3. 如果第一个参数与第二个参数匹配,则返回0