使char指针指向null会导致分段错误

在linux中,我正在尝试下面的代码,该代码导致分段错误错误:


int main(int arg_count,char *args[]){  

    char *buffer;

    if(arg_count>1)

      buffer = args[1];

    else 

      *buffer = 0;

 }

我知道指针指向只读取部分内存,因此我将第一次尝试更改buffer[0]=0;为上面的内容。但是我不明白为什么这个也不起作用?!


长风秋雁
浏览 378回答 3
3回答

斯蒂芬大帝

函数的最后一行*buffer = 0试图设置指针引用的值buffer。由于buffer从未初始化过,因此包含一个不确定的值,因此取消引用buffer很可能导致段错误。对于大多数项目,您永远不要自己编写参数解析代码。有许多健壮和高效的库会比您(或我)做得更好。当您在Linux GNU上编写C语言时,getopt是一个不错的选择。

炎炎设计

如果逐行浏览程序,您会看到,如果用户不传递任何参数,则buffer只是一个随机值。如另一条评论所述,您需要对其进行初始化。在您的情况下,我认为您实际上不希望将值0放在缓冲区所指向的内存地址中。这是显示如何处理参数的代码int main(int argc, char **argv){    char *buffer = NULL;    if(argc > 1){        buffer = argv[1];    }    else{        buffer = malloc(1024);        puts("please enter an argument");        fgets(buffer, 1024, stdin);        //do stuff with buffer        free(buffer)    }    return 0;}在程序上方的代码中,检查是否有任何参数传递给程序,如果没有参数传递,则程序分配1024字节并将缓冲区指向该内存位置,然后要求用户输入。从这一点开始,您可以使用缓冲来做任何您想做的事情。
打开App,查看更多内容
随时随地看视频慕课网APP