重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

文字列の先頭に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
こんな感じなのですがもっとうまい方法はありますか?

よろしくお願いします。

A 回答 (2件)

NULLのエスケープ文字は\0ですが


\xxx等の3ケタの数字は8進数表記の文字コードとみなされます。
\000は8進数表記で文字コード0(NULL)を表記していると解釈されます。

"\01234" → '\012' , '3' , '4'
"\0001234" → '\000' , '1' , '2' , '3' , '4'
と解釈されます。
つか、NULLは文字列のターミネータに使うのが普通で文字列の先頭につけるものではありませんし、言語がそういう使い方を想定して設計されていません。
文字列の先頭にNULLを必要とするプログラムの考え方自体に無理があるような気がします。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
8進数になっているんですね。勉強になりました

お礼日時:2009/11/02 20:00

NULLは「どこも指していないポインタ」の意味で使うのが正しいです。


文字列の終端などを表わす'\0'の意味では、使えません。
    • good
    • 0
この回答へのお礼

"\0"は正しくないんですね~。
勉強になります。

お礼日時:2009/11/02 19:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!