2011-12-23 32 views
0

ストリームに文字がCでいくつかの機能によって確保されている書き込み、など:Cプログラミング - 文字に文字を書き込む方法*

int fputc (int character, FILE * stream); 
int putchar (int character); 
int putc (int character, FILE * stream); 
... 

私の質問は簡単です:提供任意の関数があります文字をchar*に書き込む可能性はありますか? (callback(int character, char * stream)

更新 :より多くを説明するためのソリューションをコンパイルするのlex/yaccのを使用して私の問題 i'am。
input()funcionはストリーム内の次の文字を返します。この関数によって返されたストリーム全体を変数に格納します。

*stream = character; 
+0

あなたはchar *型にNULL終端文字列に文字を追加意味ですか?より多くのメモリを割り当てる必要があることは分かりますか? – IanNorton

+0

正確には、私は本当に混乱しています。問題は、私は正確に最初に全体のサイズを指定することはできません。 – Aymanadou

答えて

2

ポインタ演算はCの性質であるので、そのような機能が存在しない:直接ポインタにアクセスできないのはなぜ

+0

これは危険な操作です! –

+1

@シンプル:あなたが何をしているのか分かっていれば危険ではない。 –

+0

@BlagovestBuyukliev私はあなたの応答から私は任意の割り当てられた領域を指定する前に(そしてこれは私の問題です)理解する必要があります.Plzは、割り当てられたメモリのbegeningへのポインタを再初期化する方法を説明して気にしない場合.THNKSあなたのヘルプ – Aymanadou

2

streamあらかじめそれによって指さ、あなたがどうなるいくつかのメモリに文字を配置するには:次のシーケンスポイントstream

*stream++ = character; 

は新しい、まだ書き込まれていない文字を指します。

もちろん、streamが割り当てられた領域の境界を越えて進まないようにしてください。あなたは、単純な計算を行うことができますこれを防ぐには:

if (stream - base > BUFFER_SIZE) /* stop */ 

baseが割り当てられた領域、streamの初期値の先頭へのポインタになります。

1

確かに、機能が必要な場合はsnprintfを試してください。

char buffer[BUFFER_SIZE]; 
char c = 'x'; 
snprintf(buffer, sizeof buffer, "%c", c); 

あなたが最初の文字列に、あなたの文字を変換するwillinigしている場合、あなたはまた、strcatを使用することができ、strcpyなど

+1

これは単なるバイトを置くためにはあまりにも多くのオーバーヘッドです。 –

+0

バッファの全体のサイズを最初から正確に指定することはできません。 – Aymanadou

+0

@BlagovestBuyukliev私は同意するが、彼は機能を求めた。私はちょうどそれを自分自身にバッファーに入れた。 – harald

関連する問題