2017-10-03 14 views
0

小さなプログラムの一部として、文字列をchar配列に変換する必要があります。私はstrncpy_s()メソッドを使いたいですが、私は "バッファーが小さすぎる"と言うアサーションを得続けます。 これは私のコードは次のようになります。strncpy_s - バッファが小さすぎるアサーション

char* ostr = new char[sizeof(str)+1]; 
strncpy_s(ostr, sizeof(ostr), str.c_str(), sizeof(ostr)); 

は、誰かが私を助けることができると思います。

+2

これはおそらく[XY問題](http://xyproblem.info/)です。文字列を操作する必要がある場合は** ** 'std :: string'とします.cスタイルの関数に' char * 'を渡す必要がある場合は 'c_str()'を使います。 – sp2danny

答えて

3

変数strは、std::stringオブジェクトです。オブジェクトのサイズはメンバ変数のサイズです。std::stringの場合、これは通常(実際の文字列への)ポインタであり、文字列の長さに対する変数です。

ラップされた文字列の長さを取得する場合は、length関数を使用する必要があります。

さらに、strncpy_sへのお電話でのもう一つの問題があります:あなたはsizeof(ostr)を行い、ポインタのサイズ、ないそれが指すメモリのサイズです。


最後に、あなたはどちらか、その後、C関数に文字列へのポインタを渡すコールに直接str.c_str()を使用する場合。または、C関数が文字列を変更する必要がある場合(ただし、再割り当てしない場合)は、例を使用します。 str.data()または&str[0]です。

C関数がデータを再割り当てする必要がある場合は、new[]を使用して割り当てることはできません。 malloc(またはシステムにある場合はstrdup)を使用する必要があります。

関連する問題