为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

长风秋雁 2021-04-09 17:18:30
在linux中,我正在尝试下面的代码,该代码导致分段错误错误:int main(int arg_count,char *args[]){      char *buffer;    if(arg_count>1)      buffer = args[1];    else       *buffer = 0; }我知道指针指向只读取部分内存,因此我将第一次尝试更改buffer[0]=0;为上面的内容。但是我不明白为什么这个也不起作用?!
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

函数的最后一行*buffer = 0试图设置指针引用的值buffer

由于buffer从未初始化过,因此包含一个不确定的值,因此取消引用buffer很可能导致段错误。

对于大多数项目,您永远不要自己编写参数解析代码。有许多健壮和高效的库会比您(或我)做得更好。当您在Linux GNU上编写C语言时,getopt是一个不错的选择。


查看完整回答
反对 回复 2021-04-16
?
炎炎设计

TA贡献1808条经验 获得超4个赞

如果逐行浏览程序,您会看到,如果用户不传递任何参数,则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字节并将缓冲区指向该内存位置,然后要求用户输入。从这一点开始,您可以使用缓冲来做任何您想做的事情。


查看完整回答
反对 回复 2021-04-16
  • 3 回答
  • 0 关注
  • 377 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信