【发布时间】:2021-12-06 10:33:31
【问题描述】:
我想为家庭作业创建文本清理器,但是当我使用地址清理器启动程序时,即使我使用 free(),我也会遇到 heap-buffer-overflow 异常。
预期输出:
he3llo world
helloworld
实际输出:
he3llo world
hello
提前感谢您的任何回答!
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char* fix_text(char* data, int len)
{
char* fixed_message = malloc (len * sizeof(char));
int offset = 0; //used for correct parse
for (int i = 0; i < len; i++)
{
if (isalpha(data[i]))
{
fixed_message[offset] = data[i];
offset++;
}
else if(data[i] == '\0')
{
break;
}
else if(data[i] == ' ')
{
continue;
}
}
return fixed_message;
}
int main()
{
char * text = malloc(100 * sizeof(char));
scanf("%s", text);
char* result = fix_text(text, 100);
printf("%s\n", result);
free(text);
free(result);
return 0;
}
【问题讨论】:
-
你应该用 \0 结束你的字符串,因为现在你只是中断但没有正确结束字符串。也不需要继续的第三种情况