C语言实现替代strlen的自定义my_strlen函数填空求助
C语言自定义my_strlen函数空缺补全方案
空缺位置补全内容
四个空缺位置的正确填写内容如下:
- (1):
s:将传入的字符串首地址赋值给临时指针p,避免修改原入参指针 - (2):
*p != '\0':判断当前指针指向的字符是否不是字符串结束符,是则继续循环 - (3):
p++:每次循环将指针向后偏移1个char长度,遍历下一个字符 - (4):
p - s:同类型指针相减结果为两个地址之间的char元素个数,刚好是字符串从首地址到结束符之前的字符总数,也就是字符串长度
补全后完整可运行代码
#include <stdio.h> #define MAXLENGTH 80 int my_strlen(char* s) { char *p = s; while (*p != '\0') p++; return p - s; } int main() { char str[MAXLENGTH]; int len; printf("Enter a string:"); // 注:gets函数存在缓冲区溢出风险,已被C11标准移除,实际开发建议用fgets替代 gets(str); len = my_strlen(str); printf("The length of the string %s is %d\n", str, len); }
关于你之前尝试写法的说明
你之前将*p++ != '\0'写在while判断条件中,这种写法会导致判断到结束符后指针仍会多偏移一次,虽然可以通过调整返回值逻辑得到正确结果,但可读性更差,不推荐使用。如果要沿用该写法,(3)可以填空语句;,(4)填写p - s - 1即可,但该写法容易出错,更推荐上述先判断后偏移的逻辑。
内容的提问来源于stack exchange,提问作者adirk1
相关产品推荐
相关产品推荐

