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

C语言新手编写接收字符串参数的函数 代码问题咨询

C语言字符串传参函数问题排查与实现方案

现有代码问题排查

  • 传参逻辑错误:调用ft_putchar时传入str2[20]属于数组越界访问,数组长度为20时合法下标范围是0~19,且你需要传递的是字符串首地址,直接传入数组名str2即可。
  • write参数错误:函数内write的第二个参数使用&str是取指针本身的地址,并非字符串的内存地址,直接传入str即可。
  • 输出长度不合理:固定写19作为输出长度,若字符串实际长度小于19会输出后续的内存垃圾值,应该先获取字符串的实际长度。
  • main函数返回值不符合C标准:标准要求main函数返回值类型为int,而非char。
  • 函数名语义不符:ft_putchar通常是输出单个字符的函数名,输出字符串建议命名为ft_putstr更符合通用命名规范。

正确实现代码

#include <unistd.h>

// 辅助函数:计算字符串实际长度
size_t ft_strlen(const char *str) {
    size_t len = 0;
    while (str[len] != '\0') {
        len++;
    }
    return len;
}

// 接收字符串参数的输出函数
void ft_putstr(const char *str) {
    write(1, str, ft_strlen(str));
}

int main(void) {
    char str2[20] = "GeeksforGeeks";
    ft_putstr(str2);
    return 0;
}

实现说明

  • 新增ft_strlen辅助函数计算字符串实际长度,避免输出多余的无效字符
  • 形参使用const char *修饰更规范,明确表示函数内部不会修改传入的字符串内容
  • 特别注意:数组作为函数参数传递时会自动退化为指针,不能在函数内部用sizeof求原数组的长度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:00:05