superswagy2002 发表于 2021-10-3 21:24:03

C语言22课有个地方看不懂

#include <stdio.h>

#define MAX 1024

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

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

      while (1)
      {
                ch = *target++;
                if (ch == '\0')
                {
                        break;
                }
                if ((int)ch < 0)
                {
                        target += 1;//这个语句是什么意思?
                }
                length++;
      }

      printf("您总共输入了 %d 个字符!\n", length-1 );

      return 0;
}

jhq999 发表于 2021-10-4 07:01:34

本帖最后由 jhq999 于 2021-10-4 07:12 编辑

target += 1;相当于target =target +1;或target++;
if ((int)ch < 0)
                {
                        target += 1;//这个语句是什么意思?
                }
容易出bug,如果target 数组没有初始化为0;
‘\0’前面的字符<0,由于前面已经加一,在这时*target='\0',再 target += 1;不就越过'\0'而造成越界死循环?

superswagy2002 发表于 2021-10-4 10:43:27

jhq999 发表于 2021-10-4 07:01
target += 1;相当于target =target +1;或target++;

容易出bug,如果target 数组没有初始化为0;


*targe++是字节加1还是读取下一个元素

jhq999 发表于 2021-10-4 11:13:01

superswagy2002 发表于 2021-10-4 10:43
*targe++是字节加1还是读取下一个元素

“*targe++”=》先“*targe”再+1
"*++targe"=》先+1再“*targe”
页: [1]
查看完整版本: C语言22课有个地方看不懂