马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#define MAX 1024
int main()
{
char str[MAX];
char *target = str;
int length = 0;
printf("请输入一个字符串:");
fgets(str, MAX, stdin);
while (*target++ != '\0')
{
length++;
}
printf("您总共输入了 %d 个字符!\n", length - 1);
return 0;
}
不理解S1E22课后练习动动手里这个*target++
按答案里的说法,实际取值比指针指向结果少一位,那第一位的字符指针有指到吗? 指针指向的最后一位是\n还是\0? 计算顺序是什么样的,
为什么改成*++target就不用减一即减去\n ,实际取值和指针指向的位置是什么样的关系?
本帖最后由 xiaotubie 于 2023-11-7 08:41 编辑
应该是你输入回车后导致多了一个'\n' 回车字符,所以如果你不减去 1的话,就不对了,譬如你输入abc回车后,那么如果不减1 将会输出4, 也就是回车键也算是一个你输入的字符。
*target++ 最开始取的是第一个字符,也就是从第一个字符开始比较,运算后target指向第二个字符, 循环结束后,target指向的是'\0'后面那个字符
而*++target 最开始取的是第二个字符,也就是从第二个字符比较,运算后target也指向第二个字符,循环结束后,target指向的是'\0'
|