我試圖使用strncpy
,然後是strcpy
,反之亦然,但我在運行時不斷收到分段錯誤。我認爲這是因爲函數中存在邏輯錯誤,但我切換了他們的位置,只有第一個執行。調用strcpy時出現分段錯誤
#include <stdio.h>
#include <string.h>
int main(void)
{
char c = ' ', sentence[50], *pointer_to_string;
pointer_to_string = &sentence[0];
int index = 0;
printf("Please enter a sentence:");
while ((c = getchar()) != '\n')
{
sentence[index] = c;
index++;
}
sentence[index] = '\0';
char *string_copy1, *string_copy2;
strncpy(string_copy1, pointer_to_string, 5);
printf("strncpy(string_copy1, pointer_to_string, 5):\n");
printf("%s\n", string_copy1);
strcpy(string_copy2, pointer_to_string);
printf("strcpy(string_copy2, pointer_to_string):\n");
printf("%s\n", string_copy2);
}
嘗試與'-g'標誌和使用的valgrind編譯而執行程序:'的valgrind/a.out' =>你會得到更多的信息 – YaatSuka
'的char * string_copy1,* string_copy2;'沒有。初始化這些變量之一。所以他們都沒有指向有效的內存位置。然後你使用str(n)cpy來覆蓋一個字符數組的內容 - 也就是一個「字符串」 - 但是你給它的指針並不指向這樣一個數組。因此,未定義的行爲隨之而來。 – rici
在使用它們之前,您需要初始化'string_copy1'和'string_copy2;'。使用malloc瞭解如何在這裏http://en.cppreference.com/w/c/memory/malloc –