2

私はcに取り組んでいます。以下は私のコードです:

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

int main()
{
        char* str = NULL;
        size_t n;

        printf("Enter the string : \n");
        getline(&str, &n, stdin);
        printf("Initial string is : (%s)\n", str);
        return 0;
}

上記のプログラムを実行すると、次の出力が得られます。

Enter the string :
bsalunke
Initial string is : (bsalunke
)

予期しない文字列がstrポインターに格納される理由は何ですか (つまり、多くの空白を含む文字列です)。Linuxでgcc 4.1.2バージョンを使用しています

4

2 に答える 2

5

getlineのmanページから

getline()は、ストリームから1行全体を読み取り、テキストを含むバッファーのアドレスを*lineptrに格納します。バッファはnullで終了し、改行文字が見つかった場合はそれを含みます。

それが説明だと思います。空白の多い文字列ではなく、改行で終わる文字列です。

于 2013-03-07T10:07:16.847 に答える
0

理解できないコードを書いているため、プログラムは動作しません。「ポインターに文字列を格納する」ことはできません。配列とポインタを勉強する必要があります。

データにメモリを割り当てずに、ランダムなメモリ位置にデータを保存しようとしています。これは完全に未定義の動作です。

于 2013-03-07T10:13:50.770 に答える