2012-04-17 21 views
2

私の例では、手動コピーがうまくいくように見える間にstrcpy_sとmalloc_sがエラーを投げます。ここにコードがあります。これは動作します:memcpy_sとstrcpy_sのエラーですが、for manual for loop works

hookaddrinfoluacode=(char *)malloc(16384); 
// This works   
for(i=0;i<strlen(this_token);++i){ 
    hookaddrinfoluacode[i]=this_token[i]; 
}      
hookaddrinfoluacode[i+1]='\0'; 

これは

memcpy_s(hookaddrinfoluacode,sizeof(char),this_token,strlen(this_token)); 

そしてどちらも、これはしないん

strcpy_s(hookaddrinfoluacode,strlen(this_token),this_token); 

エラーが標準ライブラリにこのコード行から投げているように見える:

_VALIDATE_RETURN_ERRCODE(dst != NULL, EINVAL); 

this_tokenはoです電話番号はthis_token=strtok_s(NULL,":",&next_token);です。

私は混乱している:)

+0

標準ライブラリ関数は正しく機能していますか? –

+0

あなたは[Obi-Wan](http://catb.org/jargon/html/O/obi-wan-error.html)を持っています。 – unwind

+0

エラーをスローするコードから、あなたの宛先ポインタが何らかの形でnullになっているように見えますか? –

答えて

2

memcpy_s元が先に収まらない場合は例外をスローします。 sizeof(char)は1です。両方の検証ポインタもNULLではないため、ポインタが必要です。

0

受信した宛先ポインタがnullではないことを検証しているようです。あなたはそれを使用する前にそれを割り当てていますか?あなたが手動でやっていることを示したように?それとは別に、2番目のパラメータとして宛先バッファのサイズと4番目にコピーするバイト数を指定する必要があります。

hookaddrinfoluacode=(char *)malloc(16384); 
memcpy_s(hookaddrinfoluacode, 16384 * sizeof(char),this_token,strlen(this_token));