2013-10-09 73 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

在代碼中不清楚您是否爲密鑰分配了任何緩衝區。我相信這就是你得到賽格錯誤的原因。