Hzq123 发表于 2021-6-8 23:53:14

s1e22:课后习题动动手第0题疑问。

老师说,你可能觉得我用一个指针指向数组是有点多此一举,但如果不这么做,程序将报错(不信你试试看~)
#include <stdio.h>
#define NUM 128

int main(int argc, const char * argv[]) {
   
    char str= " ";

    int i=0;
   
    printf("请输入一个字符串:");
   
    fgets(str, NUM, stdin);
   
    while(str!='\n')
    {
      i++;
    }
    printf("您总共输入了%d个字符\n",i);
   
    return 0;
}
没用指针也能正常运行
请问老师指的是什么情况下会报错呢?

人造人 发表于 2021-6-9 00:24:21

我感觉应该是这个意思吧
#include <stdio.h>

#define MAX 1024

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

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

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

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

      return 0;
}

wp231957 发表于 2021-6-9 07:28:34

不能进行自增自减操作

万千只cnm 发表于 2021-6-9 15:27:30

你用下标 没改变数组名的值   是个语法糖   
str ==*(str+ i)    str本身并没有变
而数组名是个指针常量不能改变 ,不能做左值   
如 改成str++ 之类就会报错   
while(*str++ !='\n')
    {
      i++;
    }
就会报错

Hzq123 发表于 2021-6-11 16:21:18

万千只cnm 发表于 2021-6-9 15:27
你用下标 没改变数组名的值   是个语法糖   
    str本身并没有变
而数组名是个指针常量不能改变...

感谢,听了后一节课,理解了数组名不能作左值的缺陷!

Hzq123 发表于 2021-6-11 16:22:00

wp231957 发表于 2021-6-9 07:28
不能进行自增自减操作

感谢!!!理解了!

Hzq123 发表于 2021-6-11 16:22:49

人造人 发表于 2021-6-9 00:24
我感觉应该是这个意思吧

嗯嗯,就是str不能作为左值,自增减。感谢回复!
页: [1]
查看完整版本: s1e22:课后习题动动手第0题疑问。