0

どこでも検索していましたが、正解はできませんでした。

問題は非常に単純です。

ASCII整数値をcharに変換する必要があります。たとえば、ASCIIテーブルによると、108は「h」文字を表します。しかし、私がそれをこのように変換しようとすると:

int i = 108
char x = i

印刷すると、(94,111 ...)と入力した数字に関係なく、「s」が表示されます。

私もこれを試しました:

int i = 108;
char x = i + '0'

しかし、私は同じ問題を抱えています!ちなみに、charsを整数に変換するのに問題はないので、どこに問題があるのか​​わかりません:/よろしくお願いします

4

3 に答える 3

1

それがあなたのやり方です。ただし、おそらく署名しないでください。

多分あなたprintfは間違っていますか?

以下は、その動作例です。

// Print a to z.
int i;
for (i = 97; i <= 122; i++) {
    unsigned char x = i;
    printf("%c", x);
}

これは期待どおりに印刷abcdefghijklmnopqrstuvwxyzされます。( ideoneで参照)

printf("%c", i);直接同様に行うことができることに注意してください。char単純に小さい整数型です。

を行おうとしている場合printf("%s", x);、これは正しくないことに注意してください。%sは文字列として出力することを意味しますが、文字は文字列ではありません。

これを行うと、 の値がxメモリ アドレスとして扱われ、そこから文字列の読み取りが開始され、\0. これが単に印刷されたs場合は、ラッキーです。これを行うと、おそらく自分のものではないメモリにアクセスすることになるため、セグメンテーション違反が発生する可能性が高くなります。(そして、ほぼ確実にあなたが望むものではありません。)

于 2011-12-09T00:12:43.783 に答える
1

あなたのprintf発言は間違っているように思えます。

printf("%c", c)c の値が 108 の場合、文字がl出力されます... http://www.asciitable.com/を見ると、108 がそうではないことがわかりますh;)

于 2011-12-09T00:12:46.327 に答える
0

あなたのprintfステートメントは次のようになっていると思います。

printf("s", x);

..実際にあなたがおそらく意味したとき:

printf("%s", x);

...これはまだ間違っています。これは文字列を期待しています。例:

char* x = "Testing";
printf("%s", x);

あなたが本当に欲しいのはこれです:

int i = 108;
char x = i + '0';
printf("%c", x);

...これは私のシステムで出力されます£

于 2011-12-09T00:22:58.880 に答える