我可以这样做,将字符串数组内容从一个复制到另一个吗?
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];
}
答案 0 :(得分:3)
您正在复制指向字符串的指针,而不是字符串本身。您应该将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?
答案 1 :(得分:2)
你正在做的是复制指向文本行的指针,这样你最终会得到两个char *的数组,这些数组指向包含实际单词的相同物理内存。
问题在于,如果你通过“&#39;然后&#39; childWords&#39;会改变,因为他们指向相同的记忆。
最安全的方法是获取每个单词的字符串长度&#39;并分配新的记忆,复制字符串,以便“儿童词汇”指向不同的记忆。
答案 2 :(得分:1)
为什么不使用memcpy()
或bcopy()
呢?
另外,我认为你不需要从malloc()
投射结果。