C - 使用 char str() 函数的运行时错误
C - Runtime Error using char str() function
我有一个全局变量,character。
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() 函数中使用时,程序因运行时错误而崩溃。即:
scanf("%s", character);
printf("%s", str()); //crashes here
-----甚至-----
scanf("%s", character);
char *str_ptr = str(); //crashes here
printf("%p", *str_ptr );
%s
格式说明符需要以空字符结尾的字符串作为参数。
使用 %c
代替打印单个字符。
char *str_ptr = str();
导致编译器错误,因为您无法将 char
转换为 char *
.
顺便说一句,您可以使用 == 运算符比较两个字符。
您的 scanf/printf 格式代码有误。您已将函数原型化为 char(而非 char*)。尝试使用 %c 而不是 %s。还要记住,char 和 char* 是非常不同的东西,一个是单个字符的存储位置,另一个是指向一个或多个字符的位置的指针。
strcmp 函数比较两个字符串。
因此,两个参数都必须是 NUL 终止的字符串。
char 字符[1] 没有空间同时容纳字符和 NUL 终止符。
代码实际上只是将全局变量中的单个字符与文字字符进行比较。
建议
if( 'N' == character[0] ) return 'N';
....
// used when character[0] does not match any of the above comparisons.
return '!';
注意:每个感兴趣的字符一个 'if' 语句,
接着是 return '!';
我有一个全局变量,character。
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() 函数中使用时,程序因运行时错误而崩溃。即:
scanf("%s", character);
printf("%s", str()); //crashes here
-----甚至-----
scanf("%s", character);
char *str_ptr = str(); //crashes here
printf("%p", *str_ptr );
%s
格式说明符需要以空字符结尾的字符串作为参数。
使用 %c
代替打印单个字符。
char *str_ptr = str();
导致编译器错误,因为您无法将 char
转换为 char *
.
顺便说一句,您可以使用 == 运算符比较两个字符。
您的 scanf/printf 格式代码有误。您已将函数原型化为 char(而非 char*)。尝试使用 %c 而不是 %s。还要记住,char 和 char* 是非常不同的东西,一个是单个字符的存储位置,另一个是指向一个或多个字符的位置的指针。
strcmp 函数比较两个字符串。
因此,两个参数都必须是 NUL 终止的字符串。
char 字符[1] 没有空间同时容纳字符和 NUL 终止符。
代码实际上只是将全局变量中的单个字符与文字字符进行比较。
建议
if( 'N' == character[0] ) return 'N';
....
// used when character[0] does not match any of the above comparisons.
return '!';
注意:每个感兴趣的字符一个 'if' 语句, 接着是 return '!';