我可以这样做,将字符串数组内容从一个拷贝到另一个吗?字符串数组的空间副本
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