通常,当我们扫描int或float或双输入时,我们在变量之前使用'&'符号,但在string
扫描字符串时,%s
格式说明符需要 char *
类型的参数。 它是这样用的:
char str[100];
scanf("%99s", str);
我们在这里不需要使用&
因为str
,当在表达式中使用时,衰减到指向其第一个元素的指针并且类型为 char *
。 因此,无需获取地址,因为您已经有一个"char *"。
如果您使用的是动态分配的内存:
char *str = malloc(100);
scanf("%99s", str);
您已经明确地拥有char *
,因此再次无需获取地址。 如果这样做,您将获得指针变量的地址,而不是分配内存的地址。 如果你这样做,坏事就会发生。
这是因为在这种情况下,数组衰减到指针,而这个指针引用这个数组的第一个char元素。所以不需要&
char str[LEN];
scanf("%s", str)
相当于scanf("%s", &str[0])