我有这段代码:
char str [80];
int i;
printf ("Enter your family name: ");
scanf ("%79s",str);
printf ("Enter your age: ");
scanf ("%d",&i);
scanf()
为什么string
str
保存到int
而pointer of i
发送给nombreArchivo
?
答案 0 :(得分:7)
如果您注意到正确,两者,则表示您正在传递指针。
对于数组,当作为参数传递给函数时,数组 name 本质上是指向数组第一个元素的指针。
因此,str
和&str[0]
是相同的。
根据%s
格式说明符的规范,来自C11
,章节§7.21.6.2, fscanf()
(强调我的 EM>)
s
匹配一系列非空白字符。如果不存在l长度修饰符,相应的参数应为a 指向字符数组的初始元素的指针大到足以接受 序列和终止空字符,将自动添加。 [...]
答案 1 :(得分:7)
scanf
需要传递变量的地址才能修改它。
将数组(在本例中为char
数组)传递给函数时,数组会衰减为指向第一个元素的指针。
因此,传递str
说明符的%s
在功能上与传入&str[0]
相同。
这也适用于指向动态分配内存的char *
:
char *str = malloc(80);
scanf ("%79s",str);