char** key;
strcpy(*key, "Hello");
strcpy(*(key+1), "World");
printf("%s", *key);
第二个strcpy
没有错误,而第一个strcpy
有分段错误。我应该如何修改才能达到最初的目的?
char** key;
strcpy(*key, "Hello");
strcpy(*(key+1), "World");
printf("%s", *key);
第二个strcpy
没有错误,而第一个strcpy
有分段错误。我应该如何修改才能达到最初的目的?
你正在做的是未定义的行为。
char * strcpy ( char * destination, const char * source )
strcpy需要一个可以修改的目的地。您正在传递char **
导致问题的 a ,因为您没有分配任何内存供它写入。
这就是(也许)你正在尝试的:
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);
您的代码中不清楚您是否为键分配任何缓冲区。我相信这就是您遇到 SEG 故障的原因。
你必须先分配内存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 有分段错误
当第二个由于分段错误而从未执行时,你怎么知道它没有错误?
没有为 分配内存key
。您可以malloc
在第一个strcpy
.
*key = malloc(32 * sizeof(char)); // pick a size of buffer
我怀疑第二次调用也会导致段错误。它(可能)将写入未分配的空间。