函数不会返回0,无法在逻辑中找到错误

时间:2014-02-25 06:14:02

标签: c function pointers while-loop return

我不确定为什么以下代码无效。

我尝试使用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; 
        }
    }
}

3 个答案:

答案 0 :(得分:7)

您的main功能最后明显缺少return 0

返回的随机值是eax返回时返回值寄存器(x86上的main)中发生的任何值。

永远不要关闭-Wall,也不要忽略警告。他们是你的朋友。


提到Jim BalterLưu Vĩnh Phúc时,return 0 is optional in C99

答案 1 :(得分:1)

您的方法声明指定它返回int

int main(int argc, char **argv){

当你执行

时,你会在if块的末尾正确返回一个int
return 1;

但是在你的else块的末尾没有返回int。您可以返回任何整数,但0对于自然终止的程序是常见的,或者您可以指定不同的整数来指定不同的退出情况。

答案 2 :(得分:1)

在代码末尾添加行返回0。它将返回适当的值。