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
相关产品推荐
相关产品推荐

