
C言語の以下のプログラムをコンパイルすると、0x6123は大きすぎる旨のコンパイルエラーとなります。
char str[]="abc\x6123";
char str[]="abc\14123";
は¥141の141を8進数とみなし、上手くいきます。
なぜ、最初のケースは\x61の61を16進数としてくれないのですか
16進数も3桁で記述する旨のサイトもあったので、
char str[]="abc\x06123";
としてみましたが、同じ結果になります。
使用しているのは、VisualStudio2017です。
No.5
- 回答日時:
ぶっちゃけていえば「そういうルール」だから.
8進数を使う場合には最長 3桁と決まっているんだけど, 16進数で書くときには長さ無制限です. ということで
char str[] = "abcde\x61";
と
char str[] = "abcde\x00000000000000000000000000000000000000000000000000000000000000000000000000061";
は同じ. まあこんなふうに書いてきたら突き返すけど.
で回避策は #4 の通り.
No.4
- 回答日時:
C言語の文字列リテラルは、連続して書いたものが連結されて使われます。
char *s = "ABCDEF" ;
と
char *s = "AB" "CD" "EF" ;
は同等です。
それを使えば
char str[]="abc\x06" "123";
等と書けます
ありがとうございました。
ベストアンサーが2つ選べたら、こちらもベストアンサーにしたかったのですが、すみません。
でも、本当に助かりました。感謝します。
No.3
- 回答日時:
「\xは続く2桁の16進数」と説明しているのもありますが,この場合4桁になってしまうのですね。
初めて知りました。「abca23」(2番目のaは16進数で指定)の文字列を入れるには,
char moji[]="abc 23";
moji[3]=\x61;
のように,(とりあえず空白文字を入れておいて)後から書き替えるしかないでしょうかね。
No.2
- 回答日時:
格納される場合を考えると
char str[]="abc\x6123";
str[0]=0x61
str[1]=0x62
str[2]=0x63
str[3]=0x6123 <-エラーとなります。
char 型なので格納サイズは1バイト〈0x0から-0xff〉です
0x6123を格納しようすればunsigned int16 にしないといけないです。
表示する文字を格納する場合
0x6123が文字コードである場合は、格納先をCstringとかにした方がぶなんです。
あるいは、6123を上下バイトに分けて格納します。
char str[]="abc\x61\x23";
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- C言語・C++・C# 【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法 4 2023/05/09 15:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CStringからchar*への型変換に...
-
char*を初期化したいのですが
-
C言語のintとcharの違いってな...
-
char型にint型の数値を代入する。
-
C言語にて構造体のメンバがNULL...
-
fgetc( )の戻り値はなぜ整数??
-
char 文字列型 の表現範囲が-12...
-
fgetsで読み込んだ値のvector処理
-
2次元配列の文字"列"の初期化方法
-
C++17で、unsigned char * 配列...
-
Cの関数の引数のconst *charに...
-
wsprintf( ポインタ , "%d" , "...
-
バイト型データの参照
-
警告
-
構造体のメンバーの静的なサイ...
-
char AA[]{"全角文字"};から"全...
-
構造体・ビットフィールドのvol...
-
new charとnew char[N]の違いは?
-
SubStringの使い方について
-
ポインタとcharについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringからchar*への型変換に...
-
char*を初期化したいのですが
-
C言語にて構造体のメンバがNULL...
-
C言語のintとcharの違いってな...
-
DWORDとcharの変換
-
C++17で、unsigned char * 配列...
-
char 文字列型 の表現範囲が-12...
-
new charとnew char[N]の違いは?
-
char型にint型の数値を代入する。
-
動的メモリの初期化方法について。
-
小数点入りの文字列をfloat型に...
-
文字型配列に格納した空白の切捨て
-
fstream型オブジェクトを関数の...
-
C++Builder 2009 テキスト...
-
文字列の途中から途中までを抽出
-
C言語の文字リテラル中の16進文...
-
エクセルのMID関数は、C言語では?
-
文字列のswap
-
void型へのポインタ
-
VC++ char[10]へのCString値の代入
おすすめ情報