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

如何在char数组中用空终止符去除fgets输入换行符且不使用string库

实现方案

核心逻辑完全不需要调用任何字符串库函数,手动遍历char数组找到换行符替换为空终止符即可:

  • fgets读取输入后,会将有效输入内容、换行符\n(如果输入长度小于数组容量、能读到换行的话)、空终止符\0依次存入传入的char数组
  • 只需要从数组下标0开始逐个遍历元素,碰到\n就直接将当前位置赋值为\0终止遍历即可;如果先碰到\0说明已经到数组末尾没有换行,直接停止即可

同时你原有代码存在两处可修正的问题:

  • int *age定义错误,atoi返回值为int类型,不需要定义为指针
  • happyBirthday函数需要提前声明,否则编译会报隐式声明错误

修改后的完整可运行代码如下:

#include <stdio.h>
#include <stdlib.h>

// 提前声明自定义函数
void happyBirthday(char *name, int age);

int main() {
    char buffer[32];
    char digits[3];
    int i;

    printf("Enter name:");
    fgets(buffer,32,stdin);
    // 替换name末尾的换行符为空终止符
    i = 0;
    while(buffer[i] != '\0') {
        if(buffer[i] == '\n') {
            buffer[i] = '\0';
            break;
        }
        i++;
    }

    printf("Enter age:");
    fgets(digits,3,stdin);
    // 替换age末尾的换行符为空终止符
    i = 0;
    while(digits[i] != '\0') {
        if(digits[i] == '\n') {
            digits[i] = '\0';
            break;
        }
        i++;
    }

    char *name = buffer;
    // 修正指针定义错误
    int age = atoi(digits);

    happyBirthday(name, age);

    return 0;
}

// 补全happyBirthday实现即可
void happyBirthday(char *name, int age) {
    printf("Happy %dth birthday, %s!\n", age, name);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:15:02