如果条件出现故障,请在里面进行字符串比较
我试图用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()
函数
- 如果第一个参数(
firstName
内容)在第二个参数之前(按字母顺序),则返回< 0
。 - 如果第一个参数(
firstName
内容)在第二个参数之后(按字母顺序排列),则返回> 0
。 - 如果第一个参数与第二个参数匹配,则返回
0
。