プロが教える店舗&オフィスのセキュリティ対策術

整数をchar型にしたいと思い

int a = 250;
char b[1];
sprintf(b, %d, a);

と書いたのですが, char型の扱える整数の範囲である-256~255のint型の整数しか
char型にこの場合変換できないということでいいでしょうか?

またint型に代入できる値は,32bit以内の整数という考えでいいですか?

A 回答 (6件)

sprintf(b, %d, a);


  ↓
sprintf(b, "%d", a);
#char b[4];    // 4以上が必須

>またint型に代入できる値は,32bit以内の整数という考えでいいですか?
int型のサイズは環境によって16bit, 32bit等変わります。
明示的に区別する場合には、short int(short)、long int
(long)を使用します。
#符号無し整数の場合は、unsigned intと記述
    • good
    • 0

(250に限らず)int型の値を文字列に変換したいのであれば、



#include <stdio.h>
#include <limits.h>

int main()
{
 int a = 250;
 char b[1 + sizeof(int)*CHAR_BIT/3 + 1];
 sprintf(b, "%d", a);
 return 0;
}

とすれば、ほぼ環境に依存せずに確実に結果を格納することができます。
「ほぼ」と書いたのは、int型の記憶域に詰め物ビットが含まれる場合には、必ずしもこれでは済まないからです。その場合には、INT_MAXの常用対数を静的に求めるためのマクロ等が必要です。しかし、それはCの場合には実現不可能です。C++であれば、std::numeric_limits<int>::digit10を使えば簡単です。
    • good
    • 0

>またint型に代入できる値は,32bit以内の整数という考えでいいですか?


処理系依存です。
まずあなたの環境を明記してください。

※VC6の場合 long longはlongと同じ
-2147483648~+2147483647の範囲になります。


以下のコードを実行してみて貴方の疑問は解決されませんか?
#include <stdio.h>
int main()
{
int a = 250;
char b[4];
sprintf(b, "%d", a);
printf(b);
}
    • good
    • 0

誤解されている方もいるようなので念のため...



C言語の整数型(浮動小数点型もそうですが)は、_Bool型を除いて、その表現範囲はすべて処理系定義です。
具体的には、short型であればSHRT_MIN~SHRT_MAX、long型であればLONG_MIN~LONG_MAX、long long型であればLLONG_MIN~LLONG_MAXが表現範囲です。符号無しの場合、unsigned char型であれば0~UCHAR_MAX、unsigned short型であれば0~USHRT_MAX、...となります。
また、char型が符号付きか符号無しかも処理系定義ですので、signed char型の表現範囲を知るには、SCHAR_MINとSCHAR_MAXを調べる必要があります。

なお、最低限保証される表現範囲というのがあります。
signed char型は-127~+127
short型とint型は-32767~+32767
long型は-2147483647~+2147483647
long long型は-9223372036854775807~+9223372036854775807
です。
-128~+127でないのは、負の数の内部表現は2の補数とは限らないからで、1の補数や符号ビット+絶対値の場合もありえます。
    • good
    • 0

<limits.h>というヘッダに、CHAR_MAXおよびCHAR_MINというマクロがあります。

それがchar型で表現可能な最大値と最小値を表しています。
int型の場合は、INT_MAXとINT_MINを調べてください。
    • good
    • 0

環境限定したほうが良いですよ



char型が8ビットなら 符号付の場合-128から127、符号なしなら0から255となります

sprintfで char型要素1個の配列に出力すると余分な領域までデータを書き込み最悪ハングアップやシステムダウンになります

sprintfの "%d"は 整数値を文字列で表そうとします
したがって 『250』の場合 『2』『5』『0』『\0』の最低4つの要素を持つchar配列が必要になります
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!