黑眼睛 发表于 2020-10-20 12:55:25

请问大家,这里length为什么减1啊?减去的到底是什么呢

#include <stdio.h>

#define MAX 1024

int main()
{
      char str;
      char *target = str;
      int length = 0;

      printf("请输入一个字符串:");
      fgets(str, MAX, stdin);

      while (*target++ != '\0')
      {
                length++;
      }

      printf("您总共输入了 %d 个字符!\n", length - 1);//这里为什么length-1啊
      return 0;
}

2269099035 发表于 2020-10-20 12:58:12

最后的回车也是一个字符,要把它去掉。

bonst 发表于 2020-10-20 13:19:34

楼上正解

黑眼睛 发表于 2020-10-20 19:18:34

2269099035 发表于 2020-10-20 12:58
最后的回车也是一个字符,要把它去掉。

是不是 fgets函数合法读取了printf("请输入一个字符串:");中的最后一个换行符'\0'并将它也作为一个字符参加接下来得while循环?

damon2009a 发表于 2020-10-20 19:19:23

最后一个回车\0在字符串中也算一个字符,要去掉,当然要-1啦
求采纳{:10_256:}

黑眼睛 发表于 2020-10-20 19:21:11

damon2009a 发表于 2020-10-20 19:19
最后一个回车\0在字符串中也算一个字符,要去掉,当然要-1啦
求采纳

是不是 fgets函数合法读取了printf("请输入一个字符串:");中的最后一个换行符'\0'并将它也作为一个字符参加接下来得while循环?

damon2009a 发表于 2020-10-20 20:57:51

本帖最后由 damon2009a 于 2020-10-20 21:01 编辑


是不是 fgets函数合法读取了printf("请输入一个字符串:");中的最后一个换行符'\0'并将它也作为一个字符参加接下来得while循环?fgets函数的定义:C 库函数 char *fgets(char *str, int n, FILE *stream) 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。 当读取(n-1)个字符时 ,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。你可以参考fgets函数

2269099035 发表于 2020-10-20 22:54:14

黑眼睛 发表于 2020-10-20 19:21
是不是 fgets函数合法读取了printf("请输入一个字符串:");中的最后一个换行符'\0'并将它也作为一个字符 ...

你调用了fgets(),然后输入,输入最后会有一个回车'\n'。这个是算一个字符的。然后'\0'在这里不算字符。所以是-1
页: [1]
查看完整版本: 请问大家,这里length为什么减1啊?减去的到底是什么呢