
文字列の先頭にNULLを付けたい時文字列の次の文字が半角の数字だった場合"\01234"とすると先頭がNULLになりませんでした。
"\0001234"としたときちゃんとNULLになり、その場合"\000こんにちわ"でも先頭はNULLでした。"\0こんにちわ"もNULLでした。\000というのは正しい使い方なのでしょうか?
#include <stdio.h>
int main() {
char str[] = "\0009\n";
printf("%s", str+1);
return 0;
}
ついでに質問です。"こんにちわ\n"や"おはよう\n"などの文字列の先頭にNULLを付けて初めから文字列リテラルを作りたい場合にマクロで"\000こんにちわ\n"などと置き換えたい場合、できればM("こんにちわ\n")という形で作る事は可能でしょうか?
M(こんにちわ\n)を"\000こんにちわ\n"に置き換えるマクロは作れました。
#define M(str) M1(\000##str)
#define M1(str) #str
こんな感じなのですがもっとうまい方法はありますか?
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
NULLのエスケープ文字は\0ですが
\xxx等の3ケタの数字は8進数表記の文字コードとみなされます。
\000は8進数表記で文字コード0(NULL)を表記していると解釈されます。
"\01234" → '\012' , '3' , '4'
"\0001234" → '\000' , '1' , '2' , '3' , '4'
と解釈されます。
つか、NULLは文字列のターミネータに使うのが普通で文字列の先頭につけるものではありませんし、言語がそういう使い方を想定して設計されていません。
文字列の先頭にNULLを必要とするプログラムの考え方自体に無理があるような気がします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Replace関数について教えて...
-
CSSが全く分かりません、お助け...
-
CPUが16bitでも32bitOSでコンパ...
-
最初に聞かれたこと
-
DLLファイルの逆コンパイラにつ...
-
C言語 関数、変数の宣言について
-
C言語でファクト関数を使わずに...
-
あってる
-
DNCL(共テ用プログラミング言語...
-
バッチファイルで以下のような...
-
visual studio 2022でのC#プロ...
-
プログラミングc++を全く分か...
-
DNCL(共テ用プログラミング言語...
-
C言語 配列と関数の練習問題
-
gccを行ってもexeファイルが生...
-
c言語
-
VisualStudio2022でC言語プログ...
-
ストリームについて。
-
Cのオブジェクトファイルの逆ア...
-
Windows Formアプリからコンソ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSSが全く分かりません、お助け...
-
DLLファイルの逆コンパイラにつ...
-
プログラマー達は何故、プログ...
-
C言語の関数のextern宣言
-
c言語
-
プログラミングc++を全く分か...
-
C言語について(初心者)
-
C言語 関数、変数の宣言について
-
あってる
-
Windows Formアプリからコンソ...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
逆コンパイルと逆アセンブルの...
-
DNCL(共テ用プログラミング言語...
-
VisualStudio2022でC言語プログ...
-
【C言語】全角文字の配列を、全...
-
C言語のことです。写真(見にく...
-
C#でログファイルにファイルパ...
-
C# で 数式文字列処理を処理す...
-
C#でTreeViewのCheckBoxのサイ...
おすすめ情報