为什么realloc在这种情况下不能正常工作?

Ano*_*ous 0 c string pointers realloc

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

char *func(char * str){


    int len;
    len=strlen(str)+3;
    str = (char *)realloc(str,len);
    return str;


}

void main(){

    printf("str:%s",func("hello"));

}
Run Code Online (Sandbox Code Playgroud)

最后的ans打印(null),而不是打印字符串:"hello".任何人都可以解释为什么会如此?我无法识别任何错误. 任何人都可以纠正错误,并帮助我使用正常工作的代码.请!

Sou*_*osh 6

您的程序调用未定义的行为,因为您传递的指针(以前没有由动态内存分配器函数系列返回)realloc().

根据C11章节§7.22.3.5,realloc函数,(强调我的)

如果ptr是空指针,则该realloc函数的行为类似于malloc指定大小的函数.否则,如果ptr与内存管理函数先前返回的指针不匹配,或者如果通过调用freeor realloc函数释放了空间,则行为未定义.[...]

那说,


Bat*_*eba 6

"hello"是一个只读字符串文字.它的类型实际上是一个const char*虽然编译器允许分配给char*尽管这导致了所有的快乐地狱.

调用realloc这样一个指针的行为是未定义的.所以编译器可以做任何喜欢的事情.它可能会吃你的猫.