为什么将字符串的scanf保存为str而对于int它被发送到i的指针?

时间:2016-01-15 22:08:59

标签: c arrays pointers scanf

我有这段代码:

char str [80];
int i;
printf ("Enter your family name: ");
scanf ("%79s",str);  
printf ("Enter your age: ");
scanf ("%d",&i);

scanf()为什么string str保存到intpointer of i发送给nombreArchivo

2 个答案:

答案 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);