使用strcpy在C中分割错误错误

时间:2013-10-09 05:43:01

标签: c

char** key;

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

printf("%s", *key);

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

4 个答案:

答案 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

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