3 回答
TA贡献1827条经验 获得超8个赞
函数的最后一行*buffer = 0
试图设置指针引用的值buffer
。
由于buffer
从未初始化过,因此包含一个不确定的值,因此取消引用buffer
很可能导致段错误。
对于大多数项目,您永远不要自己编写参数解析代码。有许多健壮和高效的库会比您(或我)做得更好。当您在Linux GNU上编写C语言时,getopt是一个不错的选择。
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字节并将缓冲区指向该内存位置,然后要求用户输入。从这一点开始,您可以使用缓冲来做任何您想做的事情。
- 3 回答
- 0 关注
- 377 浏览
添加回答
举报