標準入力から文字列を読み込む【その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 しないといけないが。