このページの解説は C99 をベースとしています。
以下は目次です。
「100」「-50」のような整数を文字列に変換したいとします。
C言語の標準ライブラリの snprintf関数を利用できます。
#include <stdio.h>
int main(void)
{
char s[32];
(s, sizeof(s), "%d", 100);
snprintf(s);
puts
(s, sizeof(s), "%d", -50);
snprintf(s);
puts
(s, sizeof(s), "%+d", +50); // +符号を付けたい場合
snprintf(s);
puts}
実行結果:
100
-50
+50
%d変換を使って、整数を文字列化します。 整数の定数を「+50」のように表記できるので、変換後の文字列にも符号をきちんと付けたいのなら、 「%+d」のように「+」を挟み込んでください。
snprintf関数の戻り値を調べることで、配列の大きさが不足して、文字列が途中で途切れていないかどうかを知ることができます。少々、面倒になりますが、たとえば以下のように書けます。
#include <stdio.h>
int main(void)
{
char s[2];
int n;
= snprintf(s, sizeof(s), "%d", 100);
n if (n < 0) {
("error\n", stderr);
fputs}
else if (n < sizeof(s)) {
(s);
puts}
else {
("%s (truncated)\n", s);
printf}
= snprintf(s, sizeof(s), "%d", -50);
n if (n < 0) {
("error\n", stderr);
fputs}
else if (n < sizeof(s)) {
(s);
puts}
else {
("%s (truncated)\n", s);
printf}
= snprintf(s, sizeof(s), "%+d", +50); // +符号を付けたい場合
n if (n < 0) {
("error\n", stderr);
fputs}
else if (n < sizeof(s)) {
(s);
puts}
else {
("%s (truncated)\n", s);
printf}
}
実行結果:
1 (truncated)
- (truncated)
+ (truncated)
戻り値が、第2引数に指定した大きさ以上だった場合、配列が不足しています。その場合でも、終端の ‘\0’ はきちんと付加されるので、最低限の動作という面では安全ですが、意図どおりの結果を得られていない訳なので、注意が必要です。
return 0;
を削除(C言語編全体でのコードの統一)VisualStudio 2013 の対応終了。
「VisualC++」という表現を「VisualStudio」に統一。
「方法③」の内容を、_snprintf関数を使う例から _snprintf_s関数を使う例に修正した。
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |