如何显示指针引用的值?

时间:2019-03-30 06:42:28

标签: c pointers

显示对本地函数引用的指针的值对我来说很有意义,在主函数中调用此本地函数后,指针引用的值已更改。

#include<stdio.h>

char *getAnotherString(){

    char target[] = "Hi, ComplicatedPhenomenon";
    char *ptrToTarget = target;

    printf("ptrToTarget                 = %p\n", ptrToTarget);
    printf("ptrToTarget                 = %s\n", ptrToTarget);
    return ptrToTarget;

}

int main(){
    char *ptrToTarget = NULL;
    ptrToTarget = getAnotherString();
    printf("ptrToTarget                 = %p\n", ptrToTarget);
    printf("ptrToTarget                 = %s\n", ptrToTarget);

    return 0;
}

我希望输出像

ptrToTarget                 = 0x7ffeeed1c950
ptrToTarget                 = Hi, ComplicatedPhenomenon
ptrToTarget                 = 0x7ffeeed1c950
ptrToTarget                 = Hi, ComplicatedPhenomenon

实际输出是

ptrToTarget                 = 0x7ffeeed1c950
ptrToTarget                 = Hi, ComplicatedPhenomenon
ptrToTarget                 = 0x7ffeeed1c950
ptrToTarget                 = Hi, ComplicatedP

2 个答案:

答案 0 :(得分:3)

char target[] = "Hi, ComplicatedPhenomenon";

local 字符数组。这意味着一旦函数结束,它将变为无效,以后不应再使用它。这样做将调用未定义行为,这意味着输出可能是任何东西。

您可以通过使用malloc或使用static数组动态分配内存来修复它。

答案 1 :(得分:0)

我在c语言方面经验不足,但是我认为这与内存范围有关。 用char []分配的变量存储在堆栈中。 (我只是在谷歌上搜索它,实际上它似乎取决于编译器) 因此,在返回函数后,指针没有实际值。

但是,如果像这样将ptrToTarget定义为char *,     char * ptrToTarget =“ ...”; 这将按预期工作。