僕にできる
write(&'\n', 1);
そしてそれは同等ですか
char a = '\n';
write(&a, 1);
これをファッション的にどのように解決しますか?
最初の引数として char 配列のみを受け取り、その次元を 2 番目の引数として取る関数を使用して、改行文字を書き込もうとしています (\0
有効な書き込み可能な文字であるため、次元を指定する必要があります) 。
僕にできる
write(&'\n', 1);
そしてそれは同等ですか
char a = '\n';
write(&a, 1);
これをファッション的にどのように解決しますか?
最初の引数として char 配列のみを受け取り、その次元を 2 番目の引数として取る関数を使用して、改行文字を書き込もうとしています (\0
有効な書き込み可能な文字であるため、次元を指定する必要があります) 。
文字リテラルのアドレスを取得できない理由は、コンパイラが実際にそれを文字の実際の ASCII 値 (この場合は 10) に置き換えるためです。コードは実際には次のようになります。
write(&10, 1);
また、数値リテラルのアドレスを取得することはできません。これは、メモリに保存されているのではなく、実際に生成されたコードの一部である可能性が高いためです。
他の人がすでに指摘しているように、文字リテラルのアドレスを取得することはできません。
文字配列は通常、ゼロで終了する必要があるため、できたとしても、それは間違った型になります。
あなたが探しているものは次のとおりです。
書き込み ("\n", 1);
あなたはこれを行うことができます:
write("\n", 1);
あなたが求めているのは、2つの異なることです:
'\n'
は文字リテラルであり、整数リテラルとして扱われます。
char a
文字変数です。
リテラルではなく、変数のアドレスを取得できます。