char** key;
strcpy(*key, "Hello");
strcpy(*(key+1), "World");
printf("%s", *key);
第二个strcpy
没有错误,而第一个strcpy
有分段错误。我该如何修改以达到最初的目的?
答案 0 :(得分:1)
您正在做的是未定义的行为。
char * strcpy ( char * destination, const char * source )
strcpy期望一个可以修改的目的地。您正在传递导致问题的char **
,因为您没有为其写入任何内存。
这是(或许)你在尝试的事情:
char* key = malloc(sizeof(char)*7); // 7 because it can Hold World with a Nul character
strcpy(key, "Hello");
strcpy((key+1), "World");
printf("%s", key);
答案 1 :(得分:1)
您的代码中是否不清楚是否为密钥分配任何缓冲区。我相信这就是你得到SEG错误的原因。
答案 2 :(得分:0)
在执行strcpy()
之前,必须先分配内存,如果要跳过分配内存,请尝试strdup()
。
为了简化,不确定您是否真的需要char **key
,使用char *key
char* key = malloc(sizeof(char) * 100); //allocate to store 100 chars
strcpy(key, "Hello");
strcpy(key + strlen(key), "World");
//or strcat(key, "World");
第二个strcpy没有错误,而第一个strcpy有一个分段错误
你怎么知道第二个因为分段错误而从未执行时没有错误?
答案 3 :(得分:0)
没有为key
分配内存。您可以在第一个malloc
之前使用strcpy
分配内存。
*key = malloc(32 * sizeof(char)); // pick a size of buffer
我怀疑第二次通话也会导致段错误。它(可能)将写入未分配的空间。