YiMingC 发表于 2019-6-11 20:43:20

关于数组指针的输入和输出

代码如下,为什么会出现如图所示的输出结果{:10_266:}
#include <stdio.h>
main()
{
      int i;
      char n = 'a';
      char *id={&n};
      for (i=0;i<3;i++)
      {
                printf("请输入第%d位的姓名:",i+1);
                scanf("%s",id+i);
      }
      for (i=0;i<3;i++)
      {
                printf("%s\n",id+i);
      }
}

Krant5 发表于 2019-6-11 21:04:14

对于野指针只能说一切皆有可能啊!,指针数组也没空间就能随便输入了吗
char *id={&n}; // 根本没分配空间

YiMingC 发表于 2019-6-11 21:12:26

Krant5 发表于 2019-6-11 21:04
对于野指针只能说一切皆有可能啊!,指针数组也没空间就能随便输入了吗

为什么是野指针啊...我不是全初始化过了吗{:10_250:}

Krant5 发表于 2019-6-11 21:20:05

YiMingC 发表于 2019-6-11 21:12
为什么是野指针啊...我不是全初始化过了吗

指针都是要分配空间的

YiMingC 发表于 2019-6-11 21:23:26

Krant5 发表于 2019-6-11 21:20
指针都是要分配空间的

不能这样初始化全指向一个东西吗...

Krant5 发表于 2019-6-11 21:30:47

YiMingC 发表于 2019-6-11 21:23
不能这样初始化全指向一个东西吗...

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

另外你可以思考下
char *id={&n};
id+i; //指针到底偏移了多少呢?,这里也是错的

YiMingC 发表于 2019-6-11 21:45:44

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

另外 ...

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

第10行的id+1改成id;

但是运行了好像也是不行{:10_250:}

Krant5 发表于 2019-6-11 21:57:22

YiMingC 发表于 2019-6-11 21:45
修改了一下
char *id={NULL};



omg, malloc函数与指针好好再学习一下
说了好几次要分配空间了,为什么还是不理解,你随便给指针赋个NULL就是分配空间了吗..........
C语言就这么多东西了,祝成功!

王尧 发表于 2019-6-11 22:00:28

因为没有申请数组长度,看下面的代码#include <stdio.h>
void main()
{
      int i;
      char c;
      char (*id)= c;
      for (i=0;i<3;i++)
      {
                printf("请输入第%d位的姓名:",i+1);
                scanf("%s",*(id+i));
      }
      for (i=0;i<3;i++)
      {
                printf("%s\n",*(id+i));
      }
}

YiMingC 发表于 2019-6-11 22:06:20

王尧 发表于 2019-6-11 22:00
因为没有申请数组长度,看下面的代码

请问一下用指针数组应该怎么写呢{:10_250:}

YiMingC 发表于 2019-6-11 22:07:19

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

我还没学到动态内存分配函数,我再琢磨琢磨吧,谢谢啦{:10_250:}

王尧 发表于 2019-6-11 22:32:49

YiMingC 发表于 2019-6-11 22:06
请问一下用指针数组应该怎么写呢

char (*id)= c;
这不就是指针数组吗,id就是c的第一个数组的地址

YiMingC 发表于 2019-6-12 17:28:48

王尧 发表于 2019-6-11 22:32
char (*id)= c;
这不就是指针数组吗,id就是c的第一个数组的地址

这个是数组指针啊{:10_266:}

notfornothing 发表于 2019-6-12 21:03:50

本帖最后由 notfornothing 于 2019-6-12 21:10 编辑

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

#include <stdio.h>
main()
{
                int i;
      char *id[]={"jack",
                        "tom",
                        "lucy"};

      for (i=0;i<3;i++)
      {
                printf("%s\n",*(id+i));
      }
                system("pause");
}

YiMingC 发表于 2019-6-13 14:50:31

notfornothing 发表于 2019-6-12 21:03
楼上那位应该是数组指针吧?
我水平有限:
我用你的代码可以正常输出


好的,麻烦大家了~

notfornothing 发表于 2019-6-14 00:08:28

YiMingC 发表于 2019-6-13 14:50
好的,麻烦大家了~

你可以参考一下我的帖子,我就这个程序printf参数格式提了问。有大佬说你这个程序有错误。id这个变量会被覆盖掉,好像是作为内存空间来使用的 而不是字符串常亮的地址

YiMingC 发表于 2019-6-14 11:22:19

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

好的,感谢~
页: [1]
查看完整版本: 关于数组指针的输入和输出