我可以做这样的事情,将字符串数组内容从一个复制到另一个吗?
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];
}
您正在复制指向字符串的指针,而不是字符串本身。您应该将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
相同的操作。阅读更多 这里 strdup 是做什么的?
您正在做的是复制指向文本行的指针,因此您最终将得到两个 char* 数组,它们指向包含实际单词的同一物理内存。
这样做的问题是,如果你通过"单词"改变记忆,那么"childWords"就会改变,因为它们指向相同的记忆。
最安全的方法是获取每个"单词"的字符串长度并分配新的内存,将字符串复制过来,以便"childWords"指向不同的内存。
为什么不使用memcpy()
或bcopy()
呢?另外,我不认为您需要从malloc()
中投出结果。