直接上代码:
#include <stdio.h>
#include <string.h>
int main (int argc,char** argv)
{
#if 1 //PLAN a
//method A
char* key,value;
printf("a:K:%s,V:%s\r\n",argv[2],argv[3]);
key = argv[2];
value = argv[3];
//method B
char *key,*value;
printf("a:K:%s,V:%s\r\n",argv[2],argv[3]);
strcpy(key,argv[2]);
strcpy(value,argv[3]);
printf("b:K:%s,V:%s\r\n",key,value);
#else //PLAN b
char key[16],value[16];
printf("a:K:%s,V:%s\r\n",argv[2],argv[3]);
strcpy(key,argv[2]);
strcpy(value,argv[3]);
printf("b:K:%s,V:%s\r\n",key,value);
#endif
return 0;
}
编译环境:UBUNTU下自带的GCC
执行:
$ ./test 1 sky 123
输出:
a:K:sky,V:123
段错误 (核心已转储)
PLAN b输出无误。
PLAN a下面的 method A、B都不行,反馈都是段错误 (核心已转储)
请问大佬们知道这个错误的原因在哪儿吗?
char* key,value;你的value是char而不是char *
更正后,代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc,char** argv)
{
#if 1 //PLAN a
char *key,*value;
printf("a:K:%s,V:%s\r\n",argv[2],argv[3]);
//method A
key = argv[2];
value = argv[3];
//method B
key = malloc(16);
value = malloc(16);
strcpy(key,argv[2]);
strcpy(value,argv[3]);
printf("b:K:%s,V:%s\r\n",key,value);
#else //PLAN b
char key[16],value[16];
printf("a:K:%s,V:%s\r\n",argv[2],argv[3]);
strcpy(key,argv[2]);
strcpy(value,argv[3]);
printf("b:K:%s,V:%s\r\n",key,value);
#endif
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632