1

ゲートウェイ (文字列を含むOct/10/12) のデータをコピーしてdest_dataいますdest_dataが、ソースよりも多くの文字を取得しています:

unsigned_8   *dest_data
int_16 len;      

len = (int_16)strlen( Gateway ); // len got 9 correctly
(void)memcpy( dest_data, GatewayApplicationRlsDate, len );

の最終出力dest_data"Oct/10/1210.1.3"

dest_dataコピーする前にクリーニングする必要がありますか?

4

5 に答える 5

6

文字列の内容をコピーしますが、終端の null 文字はコピーしません。len に 1 を加えれば、問題ないはずです。しかし、適切な解決策はstrcpy()、末尾の null 文字を自動的にコピーする を使用することです。

また、dest_data ( malloc((len + 1) * sizeof(*dest_data));)にメモリを割り当てることも考えてください。

unsigned_8   *dest_data;
int_16 len;      

len = (int_16)strlen( Gateway ) + 1; 
dest_data = malloc(len * sizeof(*dest_data));
(void)strcpy( dest_data, GatewayApplicationRlsDate );
于 2012-10-30T15:12:46.717 に答える
3

メモリが割り当てられておらずdest_data(初期化されていないポインタです) memcpy()、ヌル ターミネータがコピーされていません。ヌル ターミネータもコピーするためlen + 1に、メモリのバイトを割り当ててコピーします。dest_datalen + 1

于 2012-10-30T15:13:02.003 に答える
1

len + 1 バイトをコピーする必要があります

現時点では、ヌル ターミネータをコピーするのを忘れています\0

コピーにアクセスしようとすると、文字列関数は、どこにでもある可能性がある が見つかるまで検索します\0

于 2012-10-30T15:12:46.640 に答える
1

strlen は GatewayApplicationRlsDate からの長さを使用すべきではありませんか?

すなわち:

len = (int_16)strlen( GatewayApplicationRlsDate );

于 2012-10-30T15:21:29.560 に答える
0

を使用する必要がありますstrcpy。これにより、末尾のヌル バイトもコピーされます。

strcpy( dest_data, GatewayApplicationRlsDate );

もちろん、生のポインターの処理に関するすべての警告が適用されます。本当に、おそらくstd::stringorを使用する必要がありますstd::vector<char>

于 2012-10-30T15:15:58.153 に答える