我不确定为什么以下代码无效。
我尝试使用gcc编译它gcc -Wall -o test test.c
,它给出了警告信息:控制到达非void函数的结尾。
但是我找不到错误所以我试图编译它忽略警告消息,并在使用./test 1234321
gcc -o test ispalidrome.c
测试了程序
但不是返回0(它应该由我理解,因为它没有触发任何if语句返回1),它返回一个随机值,46,52,84等。
该计划背后的主要逻辑完全符合要求,我只是不知道为什么它没有正常退出。
#include <stdio.h>
int main(int argc, char **argv){
if (argc != 2){
fprintf(stderr, "Usage: %s \"string\"", argv[0]);
return 1;
}
else{
int i = 0;
while( '\0' != argv[1][i] ) i++;
char *start=argv[1];
char *end=&start[i-1];
while (start<end){
if (*start != *end){
break;
return 1;
}
printf("%c is the same as %c\n",*start, *end);
start =start+1;
end=end-1;
}
}
}
答案 0 :(得分:7)
您的main
功能最后明显缺少return 0
。
返回的随机值是eax
返回时返回值寄存器(x86上的main
)中发生的任何值。
永远不要关闭-Wall
,也不要忽略警告。他们是你的朋友。
答案 1 :(得分:1)
您的方法声明指定它返回int
int main(int argc, char **argv){
当你执行
时,你会在if块的末尾正确返回一个intreturn 1;
但是在你的else块的末尾没有返回int。您可以返回任何整数,但0对于自然终止的程序是常见的,或者您可以指定不同的整数来指定不同的退出情况。
答案 2 :(得分:1)
在代码末尾添加行返回0。它将返回适当的值。