我试图在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;
}
答案 0 :(得分:10)
第1点
使用strcmp()
比较字符串。
第2点
更改
scanf("%s%s", firstName, lastName);
到
scanf("%19s %39s", firstName, lastName);
和执行检查scanf()
的返回值以确保成功。但是,如果你单独使用两个scanf()
来获取两个输入,那么它会更好。 less 容易出错。
答案 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
的内容)在第二个参数之前(按字母顺序排列),则firstName
。> 0
的内容)在第二个参数之后(按字母顺序排列),则firstName
。0
。