我可以這樣做,將字符串數組內容從一個拷貝到另一個嗎?字符串數組的空間副本
char **words = (char **)malloc(sizeof(char*) * lines_allocated);
char **childWords = (char **)malloc(sizeof(char*) * len1);
int i;
for(i = startIndex; i < endIndex; i++) {
childWords[i] = words[i];
}
我可以這樣做,將字符串數組內容從一個拷貝到另一個嗎?字符串數組的空間副本
char **words = (char **)malloc(sizeof(char*) * lines_allocated);
char **childWords = (char **)malloc(sizeof(char*) * len1);
int i;
for(i = startIndex; i < endIndex; i++) {
childWords[i] = words[i];
}
你在做什麼是複製指針文字的線條,讓你最終將與焦炭的兩個數組*的哪個點包含實際的話相同的物理內存。
這樣做的問題是,如果你通過「字」,然後「childWords」更改內存,因爲它們指向同一個存儲器會改變。
要做到這一點是讓每一個「字」的字符串長度和分配新的內存,複製串過讓「childWords」指向不同的內存最安全的方式。
爲什麼不用memcpy()
或bcopy()
代替? 此外,我不相信你需要從malloc()
投下結果。
您正在複製指向字符串的指針,而不是字符串本身。您應該將for
循環改變
for(i = startIndex; i < endIndex; i++) {
childWords[i] = strdup(words[i]); // creates a new copy of the string
}
strdup
通過分配足夠的內存來複制傳遞給它的字符串,即複製的字符串,它返回一個指向一個新的字符串,是字符串的副本指向words[i]
。指針可以傳遞給free
。它在string.h
頭文件中聲明。
請注意,你不應該投的malloc
結果。如果忘記包含stdlib.h
頭文件,則沒有任何好處,並且會導致錯誤。另外strdup
是POSIX標準的一部分,並且在引擎蓋下,它有效地做了與malloc
然後strcpy
相同的事情。在這裏閱讀更多What does strdup do?
您正在複製指向字符串的指針,而不是字符串本身。 – ajay