C语言 字符串数组的帕蒂亚尔副本



我可以做这样的事情,将字符串数组内容从一个复制到另一个吗?

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()中投出结果。

相关内容

  • 没有找到相关文章

最新更新