-1

コードを提示する前に、少し背景を説明します。私は という名前の文字ポインター配列を持っています。ループ内で、数学の値を using に変換して variable に保存しようとmathしています。コンパイル エラーはありません。しかし、印刷しようとすると、印刷されません。どういうわけか、プログラムはクラッシュすることなく実行されます。問題が何であるかを理解できません。問題がある場合はプログラムがクラッシュし、問題がない場合は印刷する必要があります。whileintatoiintaiaiatoiai

コードは次のようになります。

int c1 = 3; //the array contains 3 characters 1 2 3
int c2 = 0;
while(c2 < c1)
{
    int ai;
    ai = atoi(math[c2]);
    // the array is valid, I have checked it time and again so is the content in array
    write(STDOUT_FILENO,math[c2],1); //this works fine.
    write(STDOUT_FILENO,&ai,sizeof(&ai));
    //this doesn't print anything and somehow loop goes on to meet
    //the condition.
    c2++;
}
4

3 に答える 3

1

writeではないことを覚えておいてくださいprintf。そう

write(STDOUT_FILENO,&ai,sizeof(&ai))

sizeof(int)文字の断片を STDOUT に書き込みます。32 ビットの を想定するintと、ASCII コードテーブルで(ai >> 24) & ff(ai >> 16) & ff(ai >> 8) & ffおよび(ai >> 0) & ffに対応する文字が出力されます。これは、おそらく 4 つの印刷不可能な文字です。

整数の文字列表現をコンソールに書き込みたい場合は、次を使用します。

printf("%d", ai);

代わりは。

于 2012-06-12T17:34:30.747 に答える
0
write(STDOUT_FILENO,&ai,sizeof(&ai));

aiのビットパターンをに書き込みますが、 の長さではなくstdoutのアドレスの長さを使用します。最新のマシンでは、これらは通常、 とは異なる値であるため、任意のゴミを書いているか、アクセス エラーが発生することさえあります。aiai48

とにかく、これはおそらくあなたが望むものではありません。

数字を読み取り可能な文字列として書きたい場合は、次のstdoutようなものを使用します

write(STDOUT_FILENO, math, strlen(math));

mathには、 で見たい文字表現が既にありますstdout

ai本当にそこにあるビット表現をポンピングしたい場合は、

write(STDOUT_FILENO, &ai, sizeof ai);
于 2012-06-12T19:21:07.350 に答える
0

あなたの追加情報を考慮して

ソケットを使用してマルチプロセス クライアント サーバー モデル化されたコード

にはおそらく追加の魔法がありSTDOUT_FILENOます。(絶対に間違っている)と(おそらく間違っている)の代わりにfdopen、、を使用することを検討してください。fprintffflushwriteprintf

そのようです:

FILE* f = fdopen(STDOUT_FILENO, "w");
fprintf(f, "%d", ai);
fflush(f);
...
fclose(f); // also closes the socket
于 2012-06-12T18:28:15.973 に答える