指针返回问题

问题描述 投票:-2回答:1

我的C代码有问题。

#include <stdio.h>
#include <stdlib.h>

    void main()
    {
        char* testVal = getCharValue();
        printf("testVal : %s\n",testVal); //testVal = (null) why?
    }

    char* getCharValue()
    {
        char *text;

        setCharValue(text);

        return text;
    }

    void setCharValue(char* str)
    {
        char *a1 = "hello";

        strcpy(str,a1); //error ?
    }

我需要返回 char 指针值。但是这段代码并没有返回值。为什么呢?

c pointers
1个回答
0
投票

你觉得这样做有意义吗?

编码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Function Prototypes
char *getCharValue();
void setCharValue(char *str);

// main()
int main(void)
{
    char* testVal;
    testVal = getCharValue();
    puts(testVal);
    //printf("testVal : %s\n", *testVal); //testVal = (null) why?
    return 0;
}

// Function Definitions
char *getCharValue()
{
    char *text;
    if( (text = (char *)calloc(1, 10)) == NULL)
    {
        printf("Memory Unavailable.\n");
        exit(1);
    }
    setCharValue(text);
    return text;
}

void setCharValue(char* str)
{
    char *a1 = "Hello";
    strcpy(str, a1); //error ?
}

全部使用 char 在这个程序中,指针只会指向一个字符,除了 a1. 因为 a1 是一个 char *, a char array 以及其名称 char array. 所以,你可以直接点这个。

像这样 testVal<->getcharValue()->setCharValue(text)->a1.

你正在改变存储在 text 用它的地址 setCharValue(). 那么你返回的地址是 textgetCharValue() 召唤者 main(). 在 main()归来的地址 getCharValue() 分配给 testVal. 所以.., testVal 只有一个地址,它的类型是 char *.

如果你把 printf("testVal : %c\n", *testVal); 所以,为了打印存储在该地址的字符,以及该地址的字符,你应该使用以下方法来验证。puts() 函数。

我希望它能帮助你理解C语言中的指针和它们的工作原理。


0
投票

你好,Lucas和Gerhardh... 谢谢你的帮助。

我的解决方案是

#include <stdio.h>
#include <stdlib.h>

    void main()
    {
        char* testVal = getCharValue();
        printf("testVal : %s\n",testVal); //testVal = (null) why?
    }

    char* getCharValue()
    {
        char *text="hello";

        strcpy(str, text);

        return text;
    }

我的问题解决了,这个代码

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