2013-10-09 76 views
-2
char** key; 

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

printf("%s", *key); 

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

+3

呃。这是你的整个代码?你还没有初始化关键指向任何东西。因此,它是一个未初始化的指针,您正在解除引用char *以传递给strcpy。 – kfsone

回答

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); 
+0

你能解释一下多一点吗? –

+0

'sizeof(char)'在这样使用时总是多余的,它被* C标准*定义为1. – hyde

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具有分段故障

你如何知道第二个没有错误时,它从来没有执行,因为分段错误?

0

没有内存分配给key。您可以在第一个strcpy之前使用malloc分配内存。

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

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

+0

@ DennisMeng好点,我错误地读了代码。 – Steve

1

在代码中不清楚您是否为密钥分配了任何缓冲区。我相信这就是你得到赛格错误的原因。