私のコードは次のようである:予想通り変更根底にあるchar配列は
I gccを使用して、上記のスニペットをコンパイル
string s="abc";
char* pc = const_cast<char*>(s.c_str());
pc[1]='x';
cout << s << endl;
が、私は結果「AXC」を得ました。私の質問は、このようにC++の文字列の基本的なchar配列を変更することは安全で移植性があるということですか?あるいは、文字列のデータを直接操作する代替の方法があるかもしれませんか?
参考のため、私は、cとC++の両方で呼び出せる純粋なc関数を書くつもりです。したがって、引数としてchar *だけを受け入れることができます。 char *からstringへ、コピーが含まれていることを知っていますが、ペナルティは好ましくありません。ですから、誰もこの種の状況に対処するための提案をすることができます。
したがって、&mystring [0]は安全な方法ですか? – Need4Steed
@ Need4Steed:並べ替え。 C++ 98/C++ 03では、文字列の内容が技術的に連続的であることは保証されていません...しかし、標準のバグはすべての主流の実装がどうにか連続していることを意味し、これはC言語で標準化されました++ 0x。 (あなたが得たポインタはnull終端されたchar配列を指していないので、その長さも渡す必要があることに注意してください。) –
はい、最新の基準があります。また、実装されていない実装はありません。しかし、予約された長さをオーバーランしないように注意してください。 – Coder