私はしばらくこれに固執していて、Cの専門家ではありません。基本的に、既存のchar*に文字を「安全に」strcatする関数を作成しようとしています。
この例から「動的割り当て」メソッドを機能させようとしています。
いくつかの変更を加え、realloc関数によって設定されたvarを削除しました(コンパイラーはvoidを返すと言っていました)。また、文字の配列ではなく1文字だけを追加するように変更しました。これにより「realloc」パラメータが変更されると考えたので、加算文字列の長さを渡す代わりに、「sizeof(char)」を渡しました(元のサイズには余分なsizeof charが含まれていたため、x2です。ターミネータがnullであるためだと思います。 ?)
char *buffer = NULL;
int mystrcat(char addition)
{
realloc(buffer, strlen(buffer) + sizeof(char)*2);
if (!buffer)
return 0;
strcat(buffer, addition);
return 1;
}
私はそれをこのように呼びます:
if(!safestrcat(str[i+j]))
printf("Out of Memory");
何らかの理由で、私はこれを見ています:
myProg.exeの0x60f0d540(msvcr100d.dll)で未処理の例外:0xC0000005:アクセス違反の読み取り場所0x00000000。
そして、デバッガーは81行目にstrlen.asmを表示します。
main_loop:
mov eax,dword ptr [ecx] ; read 4 bytes
これが初心者の質問である場合は申し訳ありませんが、何が起こっているのですか?加算文字がバッファに追加されないのはなぜですか?
申し訳ありませんが、正常にコンパイルされることを付け加えておきます。