当前位置: 技术问答>linux和unix
memset 和 optarg 的问题
来源: 互联网 发布时间:2016-05-21
本文导语: #include #include #include #include int main(int argc, char **argv) { int opt; char *s[] = {"./code", "-a", "hello", "-o", "para" }; if (argc!=5) { argc = 5; ...
#include
#include
#include
#include
int main(int argc, char **argv)
{
int opt;
char *s[] = {"./code", "-a", "hello", "-o", "para" };
if (argc!=5)
{
argc = 5;
argv = s;
}
printf("%d n", argc);
while((opt = getopt(argc, argv, "o:a:s:")) != EOF) {
switch(opt) {
case 'o':
printf ("o %sn", optarg);
break;
case 'a':
printf ("a %sn", optarg);
int len = strlen(optarg);
printf("len is %dn", len);
printf("optarg is %sn", optarg);
memset(optarg, 'X', len);
break;
case 's':
printf ("s %sn", optarg);
break;
default:
break;
}
}
return 0;
}
全部代码如上,生成code.exe 如果从命令行输入 ./code -a dsfds -o para
代码正常,但如果仅仅输入 ./code 引发Segmentation fault (core dumped)
这两种执行方式为何后者出现问题 ? 如何解决 ? 谢谢
#include
#include
#include
int main(int argc, char **argv)
{
int opt;
char *s[] = {"./code", "-a", "hello", "-o", "para" };
if (argc!=5)
{
argc = 5;
argv = s;
}
printf("%d n", argc);
while((opt = getopt(argc, argv, "o:a:s:")) != EOF) {
switch(opt) {
case 'o':
printf ("o %sn", optarg);
break;
case 'a':
printf ("a %sn", optarg);
int len = strlen(optarg);
printf("len is %dn", len);
printf("optarg is %sn", optarg);
memset(optarg, 'X', len);
break;
case 's':
printf ("s %sn", optarg);
break;
default:
break;
}
}
return 0;
}
全部代码如上,生成code.exe 如果从命令行输入 ./code -a dsfds -o para
代码正常,但如果仅仅输入 ./code 引发Segmentation fault (core dumped)
这两种执行方式为何后者出现问题 ? 如何解决 ? 谢谢
|
char *s[] = {"./code", "-a", "hello", "-o", "para" };
静态区吧?
静态区吧?
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。