我有一个全局变量,字符。
char character[1];
char str(){
if (strcmp(character,"N")) {
return 'N';
}else if (strcmp(character,"S")) {
return 'S';
}else if (strcmp(character,"E")) {
return 'E';
}else if (strcmp(character,"W")) {
return 'W';
}else if (strcmp(character,"Q")) {
return 'Q';
}else if (!((strcmp(character,"N"))||(strcmp(character,"S"))||(strcmp(character,"E"))||(strcmp(character,"W"))||(strcmp(character,"Q")))) {
return '!';
}
}
这个函数编译得很好但是当我在int main()函数中使用时,程序因为一些运行时错误而崩溃。 IE:
scanf("%s", character);
printf("%s", str()); //crashes here
-----甚至-----
scanf("%s", character);
char *str_ptr = str(); //crashes here
printf("%p", *str_ptr );
答案 0 :(得分:0)
%s
格式说明符期望以空终止字符串作为参数
请改用%c
来打印单个字符。
char *str_ptr = str();
导致编译器错误,因为您无法将char
转换为char *
。
顺便说一句,您可以使用==运算符比较两个字符。
答案 1 :(得分:0)
您的scanf / printf格式代码错误。您已将该函数原型化为char(而不是char *)。尝试使用%c而不是%s。还要记住,char和char *是非常不同的东西,一个是单个字符的存储位置,另一个是指向一个或多个字符的位置的指针。
答案 2 :(得分:0)
strcmp函数比较两个字符串。
因此,两个参数必须是NUL终止字符串。
char字符[1]没有字符和NUL终结符的空间。
代码实际上只是将全局变量中的单个字符与文字字符进行比较。
建议
if( 'N' == character[0] ) return 'N';
....
// used when character[0] does not match any of the above comparisons.
return '!';
注意:如果'每个感兴趣的字符的陈述, 然后返回&#39 ;;';