stdinから入力を受け取ってメモリ上に保持する方法で悩んでいます。
メールデーモンからstdin経由で次のようなメッセージがわたってくるのですが、これをなんとかメモリ上に格納して
加工したいというのが趣旨です。一行の文字数がよくわからないので
行・列ともに動的にメモリを確保したいのですが、なかなかうまくいきません
入力値はこんな感じです。
 可変の文字数(横)x 可変の行数(縦)
最初は一行の横の長さをfgetcで改行文字までの文字数をカウントして
同じ行を、その長さ分mallocしたポインタに格納してfgetsすればいいだろう・・と思ってたのですが、
fgetcする時点でstdinの現在位置が変わってしまうようで、続けてfgetsすると次の行をgetしてきてしまいます。
rewindとかfseekしてstdinの位置がファイルのように戻るかなと思ったのですがだめでした。
こういう場合は、リストで横と縦を作ったほうがいいのでしょうか?
#include <stdio.h>
#include <stdlib.h>
int main(){
int i = 0;
char ch;
char *line_p;
/* 一行の長さを数える */
while(ch = fgetc(stdin)){
i++;
if(ch == '\n'){
break;
}
printf("%c",ch);
}
printf("%i",i);
/* 一行の文字数をmallocで確保してその行をポインタの先に格納する。*/
line_p = malloc(i+1);
fgets(line_p,i+1,stdin);
printf("%s",line_p);
return (0);
}