std::string
まず第一に、ほとんどの場合、文字配列の代わりにa を使用することに同意します。ヘルプへのリンクはこちら: C++ 文字列ライブラリ
今すぐあなたの質問にも直接答えてください:
*lab="\0";
*mne="\0";
and so on.....
これは間違っています。コンパイラがエラーを出さないと仮定すると、これらの配列に「null ターミネータ」を割り当てていないため、"\0"
文字列がある場所のポインタ値を char* がある最初のいくつかのメモリ位置に割り当てようとしています。を指しています!変数は文字列ではなくポインターであることを忘れないでください。ヌル文字を先頭に置こうとしているだけで、strlen
または他の C 文字列関数が「空の」文字列を認識できるようにする場合は、次のようにします*lab='\0';
。\0
、これは文字列リテラルであり、最初の要素へのポインターを返します。それが理にかなっていることを願っています。
もう一度言いますが、そのように C スタイルの文字列に「割り当てる」ことはできません。各文字を配列に入れ、正しく終了する必要があります。通常、最も簡単な方法は次のsprintf
とおりです。
sprintf(lab, "%s", "mystring");
特にポインターを逆参照していないため、これはあまり意味がないかもしれませんが、順を追って説明します。最初の引数は、sprintf に対して「このポインターが指している場所に文字を出力する」ことを示しています。したがって、生のポインターが必要です。printf
2 番目は、 usesのようなフォーマット文字列です。したがって、最初の引数を文字列として使用するように指示しています。3 つ目は、別の文字列へのポインターです。この例も同様に機能しsprintf(lab, "mystring")
ます。
C スタイルの文字列処理を学びたい場合は、いくつかの例を読む必要があります。申し訳ありませんが、ネットのどこでその良い例を探すべきかさえわかりませんが、幸運を祈っています。ただし、C++ 文字列ライブラリとそのbasic_string<>
型を確認することを強くお勧めします。これは、使用する必要がある std::string だけに typedef されています。