较大字符串的realloc()问题

较大字符串的realloc()问题,c,C,我有以下c代码: #include <stdio.h> #include <stdlib.h> int main() { char *str = malloc(5); str = "abcd\0"; str = realloc(str, 9); if(str == NULL) { printf("Not enough memory\n"); exit(EXIT_F

我有以下c代码:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char *str = malloc(5);
    str = "abcd\0";
    str = realloc(str, 9);
    if(str == NULL) {
        printf("Not enough memory\n");  
        exit(EXIT_FAILURE);
    }
    str = "abcdabcd\0";
    printf("%s\n", str);
}
main方法的前两行工作正常,但当我尝试重新分配内存时,它表示realloc是无效指针。我做错了什么

顺便问一下:如果字符串值与分配的内存块一样大,是否需要设置空字符

谢谢您的帮助。

您的线路

str=abcd\0; 没有将字符串复制到现有的mallocd内存块;相反,它使指针str指向另一个位置,即包含字符串常量的位置

相反,请执行以下操作:

strcpyrstr,abcd; 类似地,以后更改字符串内容时,应执行以下操作:

strcpyrstr,abcdabcd; 请注意,您不需要显式指定空字符-它总是自动包含在字符串常量中

顺便问一下:如果字符串值与分配的内存块一样>大,是否需要设置空字符


是的,字符串总是需要以空字符结尾。C无法知道内存块的结束位置。

str=abcd\0;如果一个9字节的realloc失败了,你就会遇到一些严重的问题。对于像这样的琐碎程序,不要费心检查NULL。这是浪费时间。另一个修复方法:char*str=strdupboug创建一个可更改的分配副本。可更改意味着您可以更改四个字符,但不能将其更改为五个字符的字符串,因此如果您计划进行更改,这是非常危险的。@gnaser729这就是realloc的作用所在。