猿问

从C函数返回字符串

我已经3年没有使用C了,在很多事情上我都非常生锈。


我知道这看起来很愚蠢,但目前无法从函数返回字符串。请假设:我不能string.h为此使用。


这是我的代码:


#include <ncurses.h>


char * getStr(int length)

{   

    char word[length];


    for (int i = 0; i < length; i++)

    {

        word[i] = getch();

    }


    word[i] = '\0';

    return word;

}


int main()

{

    char wordd[10];

    initscr();

    *wordd = getStr(10);

    printw("The string is:\n");

    printw("%s\n",*wordd);

    getch();

    endwin();

    return 0;

}

我可以捕获字符串(使用我的getStr函数),但无法使其正确显示(我得到垃圾)。


感谢帮助。


陪伴而非守候
浏览 564回答 3
3回答

慕村9548890

要么在调用方的堆栈上分配字符串,然后将其传递给函数:void getStr(char *wordd, int length) {&nbsp; &nbsp; ...}int main(void) {&nbsp; &nbsp; char wordd[10 + 1];&nbsp; &nbsp; getStr(wordd, sizeof(wordd) - 1);&nbsp; &nbsp; ...}或将字符串设为静态getStr:char *getStr(void) {&nbsp; &nbsp; static char wordd[10 + 1];&nbsp; &nbsp; ...&nbsp; &nbsp; return wordd;}或在堆上分配字符串:char *getStr(int length) {&nbsp; &nbsp; char *wordd = malloc(length + 1);&nbsp; &nbsp; ...&nbsp; &nbsp; return wordd;}

牧羊人nacy

您要在堆栈上分配字符串,然后返回指向它的指针。当函数返回时,所有堆栈分配都将变为无效;现在,指针指向堆栈上下次调用函数时可能会被覆盖的区域。为了执行您要执行的操作,您需要执行以下一项操作:使用malloc或类似方法在堆上分配内存,然后返回该指针。free完成内存后,调用者将需要进行调用。在调用函数(将使用该字符串的函数)中在堆栈上分配该字符串,然后将指针传递给该函数以将该字符串放入其中。在对调用函数的整个调用过程中,其堆栈上的数据有效。仅当您返回该堆栈分配的空间后,其他空间才会使用它。
随时随地看视频慕课网APP
我要回答