|
发表于 2018-7-13 17:34:01
|
显示全部楼层
本帖最后由 关键是感觉 于 2018-7-13 17:51 编辑
- #include <stdio.h>
- struct b{
- char name[256];
- };
- int main(){
- struct b stu[50];
- scanf("%s",stu[0].name);
- printf("stu[0].name=%s\n",(*stu).name);
- scanf("%s",&stu[0].name);
- printf("stu[0].name=%s\n",stu[0].name);
-
- //stu[0].name是一个地址
- //根据优先局 .比&高 先结合 stu[0].name 在对一个地址 :& 地址 还是原来的地址
- //但是我感觉这个说法有点问题,如果你对一个地址在取一个地址在某些情况有出错比如
- //int b; printf("%p %p\n",&b,&&b);
- //还有一个情况是这样 int array[20]={0}; printf("%p %p",array,&array);
- //array其实是一个常量地址 但是对一个常量地址 & ,他们结果是一样的
- printf("%p %p %p\n",stu[0].name,&stu[0].name,&(stu[0].name));
-
- //说了那么多,其实错误和 &没关系
- //和scanf_s有关系,也和编译器有关系
- //例如scanf(“%s”,&name,n),整形n为name类型的大小,如果name是数组,那n就是该数组的大小。
- //参数3有一个长度,而你没有加
- //在dev-c++ 有自动帮你处理,在VC没有处理,看gif
- scanf_s("%s",stu[0].name);
- printf("stu[0].name=%s\n",(*stu).name);
- scanf_s("%s",&stu[0].name,256);
- printf("stu[0].name=%s\n",stu[0].name);
- return 0;
- }
复制代码
|
|