我已经在这个问题上停留了一段时间,我不是 C 方面的专家。基本上,我正在尝试制作一个函数,可以“安全地”将字符转换为现有的 char *。
我试图从这个例子中获得“动态分配”方法:
我做了一些修改,我删除了由 realloc 函数设置的 var(编译器说它返回 void)。我还将它修改为仅附加一个字符而不是一组字符。我想这会改变“realloc”参数,所以我没有传递加法字符串的长度,而是传递了“sizeof(char)”(x2,因为原来有一个额外的 sizeof char,我认为是因为空终止符?)
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
如果这是一个新手问题,我很抱歉,但发生了什么?为什么添加字符没有附加到缓冲区?
对不起,我应该补充一点,它编译成功。