【发布时间】:2020-11-22 14:06:00
【问题描述】:
我刚刚看了一个关于返回 char* 的函数的教程。在本教程中,此功能会打印害虫,但是,当我在计算机上运行此功能时,它不会打印任何内容。 我想知道这是不是因为 s[] 的堆栈内存消失了,存储在 s[] 的字符串是否也消失了。因此,在 main 函数中,string 只是一个空指针。
#include <stdio.h>
#include <stdlib.h>
char* getstring(){
char s[] = "test";
return s;
}
int main(int argc, char* argv[]){
char* string = getstring();
string[0] = 'p';
printf("%s", string);
return 0;
}
【问题讨论】:
-
你能给我们看看有问题的教程吗?
-
youtube.com/watch?v=A8IkGIqZoLQv@KarlKnechtel
-
请不要再看那个系列的教程了。它们显示的是 未定义的行为,因为当使用指向它的指针时,
s[]不再存在。所以你说“s[] 的堆栈内存已经消失”是正确的。 -
@WeatherVane 好的,非常感谢。使用返回 char* 的函数是不好的做法吗?
-
@WeatherVane:你在视频中特别反对什么?我没有看整件事,但是主持人说在
char str[] = "test";之后返回str是不合适的,因为str消失了。这不是演示者的错 OP 使用了被认为不正确的代码。
标签: c