No.3ベストアンサー
- 回答日時:
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と記述
No.6
- 回答日時:
(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を使えば簡単です。
No.5
- 回答日時:
>また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);
}
No.4
- 回答日時:
誤解されている方もいるようなので念のため...
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の補数や符号ビット+絶対値の場合もありえます。
No.2
- 回答日時:
<limits.h>というヘッダに、CHAR_MAXおよびCHAR_MINというマクロがあります。
それがchar型で表現可能な最大値と最小値を表しています。int型の場合は、INT_MAXとINT_MINを調べてください。
No.1
- 回答日時:
環境限定したほうが良いですよ
char型が8ビットなら 符号付の場合-128から127、符号なしなら0から255となります
sprintfで char型要素1個の配列に出力すると余分な領域までデータを書き込み最悪ハングアップやシステムダウンになります
sprintfの "%d"は 整数値を文字列で表そうとします
したがって 『250』の場合 『2』『5』『0』『\0』の最低4つの要素を持つchar配列が必要になります
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C言語について コマンドラインで >変数 12.00 (char型) と、小数点付きの値を共用体に渡 1 2022/04/22 16:56
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
テキストデータをそのままバイ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
str系関数を使わずに二つの文字...
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
間接操作のレベルとは
-
ftoa の作り方
-
絶対パスからのファイル名の切...
-
エンディアン:2バイトのデー...
-
C++のCreateFile関数で、ASCII...
-
型変換
-
c言語の問題の説明、各所ごとに
-
バイトスワップをやりたい
-
atoi( ) の反対をやりたい
-
c言語プログラミング実行時エラ...
-
構造体のアライメント調整
-
間接参照のレベルが異なっています
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
'const char *' 型は 'char *' ...
-
型変換
-
テキストデータをそのままバイ...
-
文字列から空白を取り除きたい...
-
CStringをwchar_tに変換したい
-
絶対パスからのファイル名の切...
-
fgetsなどのときのstdinのバッ...
-
ネットワークにつながっている...
-
str系関数を使わずに二つの文字...
-
3桁区切(コンマ)記号をつけ...
-
atoi( ) の反対をやりたい
-
double型の値をchar配列に変換...
-
C言語のfor文です。 繰り返しの...
-
switch文で文字を比較すること...
-
ファイル名である文字列からbas...
-
c++ 文字列を入力して、一文字...
-
strncpyと_tcsncpy_sのヌルの扱...
おすすめ情報