【发布时间】:2018-06-16 00:06:55
【问题描述】:
char* test() {
char* returnValue = "test";
return returnValue;
}
char* test=test();
printf("%s",test);
使用安全吗?是一样的吗,和
char* test {
char* returnValue=strdup("test");
return returnValue;
}
char* test=test();
printf("%s",test);
如果是,那么我应该稍后释放它吗?它们似乎都可以正常工作。
【问题讨论】:
-
每次调用
malloc(strdup使用malloc)都希望调用free,是的,第一个sn-p 是安全的,但test是不可修改的。 -
为什么不能修改?如果我可以在函数之外访问这个变量,那么这意味着它位于堆上吗?否则,它会在函数完成后立即销毁?
-
因为字符串字面量通常存储在只读区域 (
.rodata),即使我们退出函数,这些区域仍然存在。 -
即使您能够修改第一个示例中的结果字符串,该更改也将是永久性的,随后对
test()的调用将返回相同更改字符串的地址。这绝对不是你想要的。
标签: c string dynamic-memory-allocation literals c-strings