C scanf() 不读取整行

C scanf() does not read full line

我想为家庭作业创建文本清理器,但是当我使用地址清理器启动程序时,即使我使用 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] == '[=12=]')
        {
            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;
}

您的代码仅输出 hello 的问题与循环停止无关。这是因为您的 scanf 只读到 space。所以你传递给函数的字符串 text 基本上只是 hello。 您可以使用

来解决这个问题
scanf("%[^\n]s",text);

一直读到换行。有关详细信息,您可以查看 this question

正如@Jabberwocky 所指出的,您并没有终止您的固定消息。当您在原始消息中遇到相同的内容时,您可以在固定消息的末尾添加空终止符 [=16=] 而不仅仅是 breaking

else if(data[i] == '[=11=]')
{
    fixed_message[offset] = data[i];
    break;
}