1

次のコードを書きました。

char *pch=new char[12];
char *f=new char[42];
char *lab=new char[20];
char *mne=new char[10];
char *add=new char[10]; 

最初にこれらの配列をnullにしたい場合、これを行うことはできません:

*lab="\0";
*mne="\0";
and so on.....

その後、空の配列にcstringを追加したい場合、チェックできません:

 if(strcmp(lab,"\0")==0)
 //then add cstring by *lab="cstring";

そして、これらのことができない場合は、正しい方法を教えてください...

4

3 に答える 3

0

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 に対して「このポインターが指している場所に文字を出力する」ことを示しています。したがって、生のポインターが必要です。printf2 番目は、 usesのようなフォーマット文字列です。したがって、最初の引数を文字列として使用するように指示しています。3 つ目は、別の文字列へのポインターです。この例も同様に機能しsprintf(lab, "mystring")ます。

C スタイルの文字列処理を学びたい場合は、いくつかの例を読む必要があります。申し訳ありませんが、ネットのどこでその良い例を探すべきかさえわかりませんが、幸運を祈っています。ただし、C++ 文字列ライブラリとそのbasic_string<>型を確認することを強くお勧めします。これは、使用する必要がある std::string だけに typedef されています。

于 2012-06-01T16:14:59.787 に答える