Shammer's Philosophy

My private adversaria

標準入力から文字列を読み込む【その3】

標準入力から文字列を読み込む【その2】 - Shammerism以来、標準入力から文字列を読み込む件が中途半端になっていた。
考えられる方法として、

1. 文字列格納用ポインタ変数を宣言
2. 文字入力を受付ける
3. 一文字だけ読み込む
4. 読み込んだ文字が改行でなければ 1 の領域に追加、改行なら終了
5. 3 に戻る

というものを考えた。しかし、以下のところまで書いて異常に大変な作業と気付く。

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

int main(int argc, char* args[]){
    char * value = NULL;
    printf("Type:");
    char c = getchar();
    printf("1st:%c\n",c);
    if( c != 'k' ){
	* value = c;
	c = getchar();
	printf("2nd:%c\n",c);
    }
    return 0;
}

ポインタ変数の要素数不定だからポインタにしているけれども、
この状態だとメモリの確保が不完全なため、4 の手順で代入した際に Segmentation fault になる。
そもそも、余計なメモリを確保しても、そのブロックが return されればスタックはクリアされるから
ここまで神経質にならなくてもいい。どうしてもやる場合は、

1. 十分なサイズで文字列格納ポインタ変数を宣言
2. 入力文字を読み込む
3. ヒープを確保して、そのアドレスを返す

という具合だろうか。受け取った側で、忘れずに free しないといけないが。