关于LINUX编程 char *value = argv[1]; 导致段错误 (核心已转储)问题

直接上代码:

#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