void test_strlen_exc(char *str_buff)
{
int i = 0;
for (i=0; i<strlen(str_buff); i++)
{
printf("%c\r\n",str_buff++);
}
}
void main(void)
{
char str_buff[20] = {"abcdef123456"};
test_strlen_exc(str_buff);
}
输出的结果只有 abcdef ,后面的 123456 并没有打印出来;
这是因为 在 for (i=0; i<strlen(str_buff); i++) strlen(str_buff) 计算长度时 str_buff 是一个指针,str_buff++指针向后移动,导致长读不断的减少,所以只能有一半打印出来了;
修改为:
void test_strlen_exc(char *str_buff)
{
int i = 0;
int len = 0;
len = strlen(str_buff); //在for 循环之前先把长度获取,这样就不会出问题;
for (i=0; i<len ; i++)
{
printf("%c\r\n",str_buff++);
}
}
本文分析了一段C语言代码中使用strlen与指针递增结合遍历字符串时出现的错误,详细解释了原因,并提供了正确的修改方案。通过本文,读者可以理解在字符串操作中常见的错误及其解决方案。
4543

被折叠的 条评论
为什么被折叠?



