C 编程语言:if 语句不能正确处理字符
C programming language :if statements are not working correctly with characters
我试图让这个程序说好,但它说还好
尽管我使变量值与 if 测试值相同
#include <stdio.h>
#include <stdlib.h>
int main()
{
char history[200];
history == "NY school";
if(history == "NY school")
{
printf("good");
}
else{printf("okay");}
return 0;
}
您需要使用函数strcmp
即
if (strcmp(history ,"NY school") == 0) ....
否则你就是在比较指针
加改
history == "NY school";
使用strcpy
这应该适合你:
#include <stdio.h>
#include <string.h>
//^^^^^^^^ Don't forget to include this library for the 2 functions
int main() {
char history[200];
strcpy(history, "NY school");
//^^^^^^^Copies the string into the variable
if(strcmp(history, "NY school") == 0) {
//^^^^^^ Checks that they aren't different
printf("good");
} else {
printf("okay");
}
return 0;
}
有关 strcpy()
的更多信息,请参阅:http://www.cplusplus.com/reference/cstring/strcpy/
有关 strcmp()
的更多信息,请参阅:http://www.cplusplus.com/reference/cstring/strcmp/
无法分配字符串(这将使用单个 =
,而不是您的代码中的 ==
)。在标准 header <string.h>
.
中查找 strcpy()
函数
此外,字符串(或任何数组,就此而言)不能使用关系运算符(==
、!=
等)进行比较 - 这种比较比较指针(第一个地址数组的元素)而不是字符串的内容。要比较字符串,请再次使用 strcmp()
函数 <string.h>
.
通过一些实现定义的优化器运气,这也可能有效:
#include <stdio.h>
int main(void)
{
char * history = "NY school";
if (history == "NY school") /* line 7 */
{
printf("good");
}
else
{
printf("okay");
}
return 0;
}
至少它在被 gcc (Debian 4.7.2-5) 4.7.2
编译时有效,顺便说一句,没有优化。
上面显示的代码打印:
good
但是在编译期间它会触发警告(针对第 7 行):
warning: comparison with string literal results in unspecified behavior [-Waddress]
我试图让这个程序说好,但它说还好 尽管我使变量值与 if 测试值相同
#include <stdio.h>
#include <stdlib.h>
int main()
{
char history[200];
history == "NY school";
if(history == "NY school")
{
printf("good");
}
else{printf("okay");}
return 0;
}
您需要使用函数strcmp
即
if (strcmp(history ,"NY school") == 0) ....
否则你就是在比较指针
加改
history == "NY school";
使用strcpy
这应该适合你:
#include <stdio.h>
#include <string.h>
//^^^^^^^^ Don't forget to include this library for the 2 functions
int main() {
char history[200];
strcpy(history, "NY school");
//^^^^^^^Copies the string into the variable
if(strcmp(history, "NY school") == 0) {
//^^^^^^ Checks that they aren't different
printf("good");
} else {
printf("okay");
}
return 0;
}
有关 strcpy()
的更多信息,请参阅:http://www.cplusplus.com/reference/cstring/strcpy/
有关 strcmp()
的更多信息,请参阅:http://www.cplusplus.com/reference/cstring/strcmp/
无法分配字符串(这将使用单个 =
,而不是您的代码中的 ==
)。在标准 header <string.h>
.
strcpy()
函数
此外,字符串(或任何数组,就此而言)不能使用关系运算符(==
、!=
等)进行比较 - 这种比较比较指针(第一个地址数组的元素)而不是字符串的内容。要比较字符串,请再次使用 strcmp()
函数 <string.h>
.
通过一些实现定义的优化器运气,这也可能有效:
#include <stdio.h>
int main(void)
{
char * history = "NY school";
if (history == "NY school") /* line 7 */
{
printf("good");
}
else
{
printf("okay");
}
return 0;
}
至少它在被 gcc (Debian 4.7.2-5) 4.7.2
编译时有效,顺便说一句,没有优化。
上面显示的代码打印:
good
但是在编译期间它会触发警告(针对第 7 行):
warning: comparison with string literal results in unspecified behavior [-Waddress]