将指针返回到静态字符串的函数

问题描述 投票:0回答:1

我有这个程序,可以打印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;
}

有人可以向我解释一下吗? 预先感谢您。

c pointers
1个回答
0
投票

函数

str
中声明的指针
foo
具有静态存储持续时间是完全不重要的。

重要的是指针

"LalaLalaLalaLala"
指向的字符串文字
str
具有静态存储持续时间。因此,函数返回的指针一直有效,直到由于函数内的指针算术而指向类型为
char[17]
的字符串文字之外为止。

str+=4;
请注意,C 字符串文字具有静态存储持续时间。

© www.soinside.com 2019 - 2024. All rights reserved.