我有这个程序,可以打印Lala。虽然我不明白为什么当我调用
foo()
时,我在主函数中没有得到编译错误。我怀疑这与 str 是 static char*
有关,但我不明白。foo()
返回一个指向字符的指针。所以它的调用不应该是这样的:
char* result = foo();
这是程序:
#include <stdio.h>
char *foo() {
static char * str = "LalaLalaLalaLala";
str+=4;
return str;
}
int main() {
foo();
foo();
printf("%s\n", foo());
return 0;
}
有人可以向我解释一下吗? 预先感谢您。
函数
str
中声明的指针foo
具有静态存储持续时间是完全不重要的。
重要的是指针
"LalaLalaLalaLala"
指向的字符串文字str
具有静态存储持续时间。因此,函数返回的指针一直有效,直到由于函数内的指针算术而指向类型为 char[17]
的字符串文字之外为止。
str+=4;
请注意,C 字符串文字具有静态存储持续时间。