char** key;
strcpy(*key, "Hello");
strcpy(*(key+1), "World");
printf("%s", *key);
第二個strcpy
沒有錯誤,而第一個strcpy
有分段錯誤。我應該如何修改才能達到最初的目的?C使用strcpy分段錯誤錯誤
char** key;
strcpy(*key, "Hello");
strcpy(*(key+1), "World");
printf("%s", *key);
第二個strcpy
沒有錯誤,而第一個strcpy
有分段錯誤。我應該如何修改才能達到最初的目的?C使用strcpy分段錯誤錯誤
你在做什麼是未定義的行爲。
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);
你能解釋一下多一點嗎? –
'sizeof(char)'在這樣使用時總是多餘的,它被* C標準*定義爲1. – hyde
您必須分配內存給你做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
。您可以在第一個strcpy
之前使用malloc
分配內存。
*key = malloc(32 * sizeof(char)); // pick a size of buffer
我懷疑第二個電話也會導致段錯誤。它(可能)會寫入未分配的空間。
@ DennisMeng好點,我錯誤地讀了代碼。 – Steve
在代碼中不清楚您是否爲密鑰分配了任何緩衝區。我相信這就是你得到賽格錯誤的原因。
呃。這是你的整個代碼?你還沒有初始化關鍵指向任何東西。因此,它是一個未初始化的指針,您正在解除引用char *以傳遞給strcpy。 – kfsone