0

私は getstring 関数を書くのに苦労しています。これが私がこれまでに持っているものです。

よろしく、V

const char* getstring()
{


    char *buffer;
    int i = 255;

    buffer = (char *)malloc(i*sizeof(char));

    *buffer = getchar();
    while ( *buffer != '\n' )
    {
        buffer++;
        *buffer = getchar();
    }
    *buffer = '\0';

    const char* _temp = buffer;
    return _temp;
}


int main()
{
    char* temp = getstring();

    for ( ;temp++ ; *temp != '\0')
    {
        printf("%c", *temp);
    }

    return 0;
}
4

4 に答える 4

2

使用しない理由

char buffer[255];
scanf("%254s", &buffer);

また

char* buffer = readline("GO GO GO:");
于 2010-04-14T22:15:25.210 に答える
2

後者が文字列の終端を指しているときに設定_tempしています。buffer'\0'

行を移動します。

const char* _temp = buffer;

次の行の直後に配置します。

buffer = (char *)malloc(i*sizeof(char));

つまり_temp、バッファの先頭を指しています。

他にもいくつか問題があります:

  1. 名前を使用しないでください_temp。先頭にアンダースコアが付いた名前は予約されています。

  2. iバイトを超えてバッファーに書き込まないことをテストする必要があります。

  3. malloc()を返すかどうかをテストする必要がありNULLます。

  4. getchar()を返すかどうかをテストする必要がありますEOF。これは、結果を に割り当てる前にgetchar()、型の変数に結果を格納する必要があることを意味します。int*buffer

  5. Michael Mrozek がコメントで指摘しているように、forループ内の式が間違っています。

...そして、スタイルのポイントとして、sizeof(char)常に 1 であるため、それを掛ける必要はありません。の結果をキャストすることはmalloc()、C では不要であり、望ましくないと見なされます (C++ とは異なり、必要な場合)。

于 2010-04-14T22:16:23.137 に答える
1
const char* _temp = buffer;

への呼び出しの直後に上記のステートメントを移動します。malloc

重要:で使用した後、 に割り当てられたメモリを
解放します。buffermain()

free(temp);
于 2010-04-14T22:17:07.440 に答える
0

malloc()呼び出しの直後に、割り当てられたポインター (によって返される値) を追跡malloc()して、呼び出し元に戻すことができるようにする必要があります。EOF と newline もチェックする必要がintありcharますgetchar()。最低限!

于 2010-04-14T22:15:35.633 に答える