鱼C论坛

 找回密码
 立即注册
查看: 1958|回复: 16

[已解决]关于数组指针的输入和输出

[复制链接]
发表于 2019-6-11 20:43:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下,为什么会出现如图所示的输出结果
  1. #include <stdio.h>
  2. main()
  3. {
  4.         int i;
  5.         char n = 'a';
  6.         char *id[3]={&n};
  7.         for (i=0;i<3;i++)
  8.         {
  9.                 printf("请输入第%d位的姓名:",i+1);
  10.                 scanf("%s",id+i);
  11.         }
  12.         for (i=0;i<3;i++)
  13.         {
  14.                 printf("%s\n",id+i);
  15.         }
  16. }
复制代码
最佳答案
2019-6-11 21:57:22
YiMingC 发表于 2019-6-11 21:45
修改了一下
char *id[3]={NULL};

omg, malloc函数与指针好好再学习一下
说了好几次要分配空间了,为什么还是不理解,你随便给指针赋个NULL就是分配空间了吗..........
C语言就这么多东西了,祝成功!
微信图片_20190611204215.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-11 21:04:14 | 显示全部楼层
对于野指针只能说一切皆有可能啊!,指针数组也没空间就能随便输入了吗
  1. char *id[3]={&n}; // 根本没分配空间
复制代码
TIM截图20190611210229.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-11 21:12:26 | 显示全部楼层
Krant5 发表于 2019-6-11 21:04
对于野指针只能说一切皆有可能啊!,指针数组也没空间就能随便输入了吗

为什么是野指针啊...我不是全初始化过了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-11 21:20:05 | 显示全部楼层
YiMingC 发表于 2019-6-11 21:12
为什么是野指针啊...我不是全初始化过了吗

指针都是要分配空间的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-11 21:23:26 | 显示全部楼层
Krant5 发表于 2019-6-11 21:20
指针都是要分配空间的

不能这样初始化全指向一个东西吗...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-11 21:30:47 | 显示全部楼层
YiMingC 发表于 2019-6-11 21:23
不能这样初始化全指向一个东西吗...

你只初始化了一个指针而已,全指向一个char的空间(一个字节而已),你输入这么多字符,你觉得合适吗?

另外你可以思考下
  1. char *id[3]={&n};
  2. id+i; //指针到底偏移了多少呢?,这里也是错的
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-11 21:45:44 | 显示全部楼层
Krant5 发表于 2019-6-11 21:30
你只初始化了一个指针而已,全指向一个char的空间(一个字节而已),你输入这么多字符,你觉得合适吗?

另外 ...

修改了一下
char *id[3]={NULL};

第10行的id+1改成id;

但是运行了好像也是不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-11 21:57:22 | 显示全部楼层    本楼为最佳答案   
YiMingC 发表于 2019-6-11 21:45
修改了一下
char *id[3]={NULL};

omg, malloc函数与指针好好再学习一下
说了好几次要分配空间了,为什么还是不理解,你随便给指针赋个NULL就是分配空间了吗..........
C语言就这么多东西了,祝成功!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-11 22:00:28 | 显示全部楼层
因为没有申请数组长度,看下面的代码
  1. #include <stdio.h>
  2. void main()
  3. {
  4.         int i;
  5.         char c[10][100];
  6.         char (*id)[100]= c;
  7.         for (i=0;i<3;i++)
  8.         {
  9.                 printf("请输入第%d位的姓名:",i+1);
  10.                 scanf("%s",*(id+i));
  11.         }
  12.         for (i=0;i<3;i++)
  13.         {
  14.                 printf("%s\n",*(id+i));
  15.         }
  16. }

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-11 22:06:20 | 显示全部楼层
王尧 发表于 2019-6-11 22:00
因为没有申请数组长度,看下面的代码

请问一下用指针数组应该怎么写呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-11 22:07:19 | 显示全部楼层
Krant5 发表于 2019-6-11 21:57
omg, malloc函数与指针好好再学习一下
说了好几次要分配空间了,为什么还是不理解,你随便给指针赋个NULL ...

我还没学到动态内存分配函数,我再琢磨琢磨吧,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-11 22:32:49 | 显示全部楼层
YiMingC 发表于 2019-6-11 22:06
请问一下用指针数组应该怎么写呢

char (*id)[100]= c;
这不就是指针数组吗,id就是c的第一个数组的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-12 17:28:48 | 显示全部楼层
王尧 发表于 2019-6-11 22:32
char (*id)[100]= c;
这不就是指针数组吗,id就是c的第一个数组的地址

这个是数组指针啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-12 21:03:50 | 显示全部楼层
本帖最后由 notfornothing 于 2019-6-12 21:10 编辑

楼上那位应该是数组指针吧?
我水平有限:
我用你的代码可以正常输出
直接初始化的时候赋值给id 也能够正常输出
但是这样的话两个程序发现printf 参数 那里好像有点区别。我再研究研究
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <windows.h>//system??
  4. #include <conio.h>

  5. #include <stdio.h>
  6. main()
  7. {
  8.                 int i;
  9.         char *id[]={"jack",
  10.                         "tom",
  11.                         "lucy"};

  12.         for (i=0;i<3;i++)
  13.         {
  14.                 printf("%s\n",*(id+i));
  15.         }
  16.                 system("pause");
  17. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 14:50:31 | 显示全部楼层
notfornothing 发表于 2019-6-12 21:03
楼上那位应该是数组指针吧?
我水平有限:
我用你的代码可以正常输出

好的,麻烦大家了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-14 00:08:28 From FishC Mobile | 显示全部楼层
YiMingC 发表于 2019-6-13 14:50
好的,麻烦大家了~

你可以参考一下我的帖子,我就这个程序printf参数格式提了问。有大佬说你这个程序有错误。id这个变量会被覆盖掉,好像是作为内存空间来使用的 而不是字符串常亮的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-14 11:22:19 | 显示全部楼层
notfornothing 发表于 2019-6-14 00:08
你可以参考一下我的帖子,我就这个程序printf参数格式提了问。有大佬说你这个程序有错误。id这个变量会被 ...

好的,感谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-13 05:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表