为了编写一些基本函数来操作 C 字符串 (char*),我一直在玩弄 malloc、realloc 和 free。从字符串中删除最后一个字符时,我遇到了这个奇怪的问题。我用这样的原型写了一个函数:
int string_erase_end (char ** dst, size_t size);
它应该将“dst”字符串缩短一个字符。到目前为止,我已经想出了这段代码:
int string_erase_end (char ** dst, size_t size)
{
size_t s = strlen(*dst) - size;
char * tmp = NULL;
if (s < 0) return (-1);
if (size == 0) return 0;
tmp = (char*)malloc(s);
if (tmp == NULL) return (-1);
strncpy(tmp,*dst,s);
free(*dst);
*dst = (char*)malloc(s+1);
if (*dst == NULL) return (-1);
strncpy(*dst,tmp,s);
*dst[s] = '\0';
free(tmp);
return 0;
}
在 main() 中,当我截断字符串时(是的,我之前在它们上调用了 malloc),我得到了奇怪的结果。根据我要截断的字符数,它可以正常工作,截断错误数量的字符或引发分段错误。
我没有动态内存分配的经验,并且一直使用 C++ 及其 std::string 来完成所有这些肮脏的工作,但是这次我需要用 C 来完成这项工作。如果有人帮助我找到并纠正我的问题,我将不胜感激这里有错误。提前致谢。