-2
char** key;

strcpy(*key, "Hello");
strcpy(*(key+1), "World");

printf("%s", *key);

第二个strcpy没有错误,而第一个strcpy有分段错误。我应该如何修改才能达到最初的目的?

4

4 回答 4

1

你正在做的是未定义的行为。

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);
于 2013-10-09T05:45:56.613 回答
1

您的代码中不清楚您是否为键分配任何缓冲区。我相信这就是您遇到 SEG 故障的原因。

于 2013-10-09T05:48:55.537 回答
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 有分段错误

当第二个由于分段错误而从未执行时,你怎么知道它没有错误?

于 2013-10-09T05:48:05.000 回答
0

没有为 分配内存key。您可以malloc在第一个strcpy.

*key = malloc(32 * sizeof(char));     // pick a size of buffer

我怀疑第二次调用也会导致段错误。它(可能)将写入未分配的空间。

于 2013-10-09T05:48:25.633 回答