5
なぜこれは機能しませんか?これを機能させるためにクリエイティブなキャスティングが可能ですか?イニシャライザをポインタにキャストする
1: const char* yo1 = "abc";
2: const char* yo2 = { 'a', 'b', 'c', '\0' }; // <-- why can't i do this?
3: printf("%s %s\n", yo1, yo2);
結果:セグメンテーションフォールト
2行目は、私はそれが何を期待して何をしていません。有効な
const char* yo2 = (char [4]) { 'a', 'b', 'c', '\0' };
をし、あなたが望むものを達成します:
いいえ! RHSは一時的です。それは周りを固執することは保証されていません。 – nneonneo
@nneonneoそれは複合リテラルです。ブロックスコープで宣言されている場合、自動保存期間があります。今なぜdownvoteしてください? – ouah
Cでは、はい。しかし、これはC++で使用するか、C++モードでコンパイルするとすぐに安全になりません。私の本では安全な練習ではありません。 – nneonneo