![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
C言語で文字列のヌルについて、理解があいまいな点があり、教えて欲しいのですが、以下のようにsprintfで書式し代入した際に最後は0(ヌル文字)をセットしてくれるのでしょうか?4バイト目の文字が何か知りたいです。
char temp[100];時では0で初期化されていることは保障されていませんが、大抵は0で埋まっていますが、sprintfの仕様が知りたいです。
char temp[100];
sprintf(temp, "test");とした時に
01234バイト目
test?????????????....
話は変わりますが、以下のようにするとエラーになりましたが、
特定の位置の値をセットする方法はどのようなものがあるのでしょうか?
temp[10] = (temp[10] == '0') ? (char)'1' : (char)'0';
No.3ベストアンサー
- 回答日時:
> 以下のようにsprintfで書式し代入した際に最後は0(ヌル文字)をセットして
> くれるのでしょうか?4バイト目の文字が何か知りたいです。
こんなコードで確認されてみてはいかがですか?
for (i = 0; i < 100; i++)
printf ("%x", temp[i]);
printf ("\n");
5バイト目が '\0' になっていることを確認できるでしょう。
> 話は変わりますが、以下のようにするとエラーになりましたが、
> 特定の位置の値をセットする方法はどのようなものがあるのでしょうか?
>
> temp[10] = (temp[10] == '0') ? (char)'1' : (char)'0';
配列の要素数が10個であればアクセスできるのは temp[0] から temp[9] までです。なので temp[10] にアクセスすると Segmentation Fault が発生するかもしれません。
No.5
- 回答日時:
>返り値
>成功時には、上記の関数は書き込まれた文字数を返す (文字列の最後を示すために使用する '\0' は数に含まれない)。
「文字列の最後を示すために使用する '\0' は数に含まれない」とわざわざ書いてあると言う事は「文字列の最後を示す '\0' も書き込まれるけど、それは返り値に含めない」と言っている訳で、つまり「文字列の最後を示す '\0' も書き込まれる」と言う事が判る。
>話は変わりますが、以下のようにするとエラーになりましたが、
意味不明。
>temp[10] = (temp[10] == '0') ? (char)'1' : (char)'0';
だけではエラーにならない。
「表示されているエラーメッセージ」を明記せずに、的確な回答を得られると思うのが間違い。
No.4
- 回答日時:
仕様が知りたければ JIS を参照すればいいのに.
C 言語は X3010 という番号で規格化されているので, 規格番号のところに X3010 を入力すれば JIS C の規格が参照できます. 参照だけですが.
参考URL:http://www.jisc.go.jp/app/JPS/JPSO0020.html
No.2
- 回答日時:
>char temp[100];時では0で初期化されていることは保障されていませんが、大抵は0で埋まっていますが、sprintfの仕様が知りたいです。
tempの配列を宣言する行為とsprintfには何の関係もありません。
Cでは自動変数を宣言した場合、0クリアしなくてもいい事になっていたはずですが、0が入っているのであればコンパイラがそういうコードを埋め込んでいるんでしょうね。
そういうことをすると遅くなるのでデバッグオプションをつけてコンパイルしているんじゃないでしょうか。
ただし、静的な変数(グローバル変数やstaticが付いたローカル変数)ならオプションに関わらず0クリアします。
>temp[10] = (temp[10] == '0') ? (char)'1' : (char)'0';
一見問題なさそうなコードですね。
どういうエラーが出ましたか?
No.1
- 回答日時:
>sprintfの仕様が知りたいです。
man sprintf を読んで、わからない点をもう一度質問して下さい。
>話は変わりますが、以下のようにするとエラーになりましたが、
どんなエラーが出たのか補足にどうぞ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# int temp = 0; if(isdigit(arr[i])){//文字が数字であれば(0~9) 1 2022/03/27 01:37
- C言語・C++・C# 【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法 4 2023/05/09 15:08
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2022/04/01 12:11
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- PHP c言語 文字 - '1'+26 3 2022/03/26 20:58
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
char*を初期化したいのですが
-
C言語のintとcharの違いってな...
-
文字列の扱いについて教えてく...
-
CStringからchar*への型変換に...
-
動的メモリの初期化方法について。
-
new charとnew char[N]の違いは?
-
C言語を用いた環境変数の作成/...
-
文字列配列を動的に割り当てる...
-
C言語にて構造体のメンバがNULL...
-
小数点入りの文字列をfloat型に...
-
const char* s1とただのchar s1...
-
文字列のswap
-
C言語で文字列をかえす正しい書...
-
ASCIIコードへの変換方法
-
C言語 strstrの実装
-
csvファイルを構造体に格納した...
-
fgetc( )の戻り値はなぜ整数??
-
2次元配列の文字"列"の初期化方法
-
文字列の途中から途中までを抽出
-
ライブラリ関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
char*を初期化したいのですが
-
CStringからchar*への型変換に...
-
C言語のintとcharの違いってな...
-
C言語にて構造体のメンバがNULL...
-
小数点入りの文字列をfloat型に...
-
strcat関数を自作したいです
-
C言語のプログラムについてです
-
const char* s1とただのchar s1...
-
DWORDとcharの変換
-
char型にint型の数値を代入する。
-
文字列の途中から途中までを抽出
-
new charとnew char[N]の違いは?
-
文字列内の数字削除
-
csvファイルをfscanfで読み込む...
-
fgetc( )の戻り値はなぜ整数??
-
char 文字列型 の表現範囲が-12...
-
fstream型オブジェクトを関数の...
-
エクセルのMID関数は、C言語では?
-
ポインタを使って回文かどうか...
-
ポインタ配列
おすすめ情報