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

gpt*_*916 0 c pointers return function while-loop

我不确定为什么下面的代码不起作用.

我尝试用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; 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*art 7

你的main功能return 0在最后很明显错过了.

它返回的随机值是返回时在返回值寄存器(eax在x86上)发生的任何事情main.

永远不要关闭-Wall,永远不要忽视警告.他们是你的朋友.


正如Jim BalterLưuVĩnhPhúc所提到的那样,return 0它在C99中是可选的.