You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何malloc分配的数组首元素为换行符?求正确读取输入方案

问题原因

当你用scanf("%d", &y)读取整数3后,输入缓冲区会残留你按下的换行符。后续的scanf("%c")会直接读取这个换行符,导致array[0]存储的是换行,而非目标字符。

修改方案

提供两种简单有效的修改方式:

方式一:手动清除缓冲区换行

在读取整数后,用getchar()吃掉残留的换行符:

int main() {
    int y;
    scanf("%d", &y);
    getchar(); // 清除输入3后的换行符
    char *array = (char*)malloc(y);
    for (int index_y = 0; index_y < y; index_y++)
    {
        scanf("%c", &array[index_y]);
    }

    printf("%c test", array[0]);
    free(array); // 释放动态分配的内存,避免泄漏
}

方式二:通过scanf格式自动忽略空白

在%d后添加空格,让scanf自动跳过后续的空白字符(包括换行):

int main() {
    int y;
    scanf("%d ", &y); // %d后加空格,自动忽略换行等空白
    char *array = (char*)malloc(y);
    for (int index_y = 0; index_y < y; index_y++)
    {
        scanf("%c", &array[index_y]);
    }

    printf("%c test", array[0]);
    free(array);
}
额外提示

输入时注意不要添加中文引号“”,否则这些引号会被当作普通字符读取。直接输入3后回车,再输入###即可。

内容的提问来源于stack exchange,提问作者hu xiuleiwe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:35:19