| ■No68978 (774RR さん) に返信 > No68937 で既に指摘済みの話なわけでいまさら感がするわけだが >>そして、.NET Framework では、UNICODE です。 >>「char*」は、文字へのポインターです。 >>そして、ANSI コードです。 >>変換できません。 > > C/C++ 側で char を使ってしまうと > System.Char (UTF-16) -> char (MBCS/CP932) -> System.Char (UTF-16) の変換が入るので > > ・ UTF-16 で表記できるが CP932 にない文字は真に文字化けする > ・不必要な変換が入るので遅い > ということになるわけで、お勧めぢゃない。 > > No68914 >>int dllfunc(int intDataNum, char * strInputDts[], char * OutputDts[]) > この関数原型宣言を見た時点で俺や Azulean 氏は以下のような感想をいだくわけだ。 > > ・文字列バッファ長を指定する何かがないのでバッファオーバーフロー脆弱性を含んでいる。 > No68938 >>C++ 同士であればこのように使うというサンプルが見えないと、具体的なコードの提示は難しいと思います。 > というのは OutputDts の使い方がわからない、って意味。 > > 実装例1: > for (i=0; i<intDataNum; ++i) { > strcpy(OutputDts[i], strInputDts[i]); > } > > 実装例2: > for (i=0; i<intDataNum; ++i) { > OutputDts[i]=strdup(strInputDts[i])); > } > どっちかで .NET 側実装はまったく違う。 >
返信が遅くなり申し訳ありません。
実装例1: for (i=0; i<intDataNum; ++i) { strcpy(OutputDts[i], strInputDts[i]); }
に該当します。 |