如果条件失灵,则在里面进行字符串

时间:2015-04-24 15:30:17

标签: c string gcc

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

  

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

     

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

源代码:

#include <stdio.h>

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;
}

2 个答案:

答案 0 :(得分:10)

第1点

使用strcmp()比较字符串

第2点

更改

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

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

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

此外,作为建议,您可以阅读有关fgets()strtok()的内容,了解如何将整行读作输入,标记化所需的部分。

答案 1 :(得分:2)

关于这一行:

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

firstName是一个数组,其值是通过scanf()设置的。因此,first name将包含一个终止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()功能

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