1. ホーム
  2. c

[解決済み] C関数から文字列を返す

2022-03-15 20:39:45

質問

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 関数が必要です)しかし、正しく表示させることができません(文字化けが発生します)。

ご協力をお願いします。

解決方法は?

呼び出し側でスタックに文字列を確保し、関数に渡すか。

void getStr(char *wordd, int length) {
    ...
}

int main(void) {
    char wordd[10 + 1];
    getStr(wordd, sizeof(wordd) - 1);
    ...
}

または、文字列を静的にして getStr :

char *getStr(void) {
    static char wordd[10 + 1];
    ...
    return wordd;
}

または、ヒープ上に文字列を割り当てる。

char *getStr(int length) {
    char *wordd = malloc(length + 1);
    ...
    return wordd;
}