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".任何人都可以解释为什么会如此?我无法识别任何错误. 任何人都可以纠正错误,并帮助我使用正常工作的代码.请!
您的程序调用未定义的行为,因为您传递的指针(以前没有由动态内存分配器函数系列返回)realloc().
根据C11章节§7.22.3.5,realloc函数,(强调我的)
如果
ptr是空指针,则该realloc函数的行为类似于malloc指定大小的函数.否则,如果ptr与内存管理函数先前返回的指针不匹配,或者如果通过调用freeorrealloc函数释放了空间,则行为未定义.[...]
那说,
对于托管环境,至少void main()应该更好int main(void).
"hello"是一个只读字符串文字.它的类型实际上是一个const char*虽然编译器允许分配给char*尽管这导致了所有的快乐地狱.
调用realloc这样一个指针的行为是未定义的.所以编译器可以做任何喜欢的事情.它可能会吃你的猫.