标题:字符指针不用键盘赋值么
只看楼主
海底石
Rank: 1
等 级:新手上路
帖 子:2
专家分:7
注 册:2020-4-12
结帖率:0
已结贴  问题点数:20 回复次数:6 
字符指针不用键盘赋值么
#include<stdio.h>

int main()
{   
    char *p;
    gets( p);
    printf("%s" , p);
    p = "你好";
printf("%s" , p);
    return 0;
}
搜索更多相关主题的帖子: 字符 指针 键盘 printf 赋值 
2020-04-13 12:32
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:7 
程序代码:
#include<stdio.h>

int main()
{
    char *p,a[30];
    p=a;
    gets(a);
    printf("%s", p);
    char *q = "你好";
    printf("%s", q);
    return 0;
}


你可以这样。首先如果使用gets函数,需要有一个内存空间,然后把空间首地址传入函数,所以需要先用a[30]申请空间,然后gets函数吧数据写入该空间。
后者如果使用字符串指针,可以char *q = "你好";使用。这个只能在指针初始化的时候使用,这个操作实际上执行了三个步骤1.申请了空间(在常量区),存放了字符串 2. 在字符串尾加上了'/0' 3.返回地址。
这样就保证了返回的首地址后有足够的空间存储字符串,不会产生指针越界的问题了。

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-04-13 12:55
吕孟伟
Rank: 8Rank: 8
等 级:贵宾
威 望:27
帖 子:200
专家分:870
注 册:2018-10-4
得分:7 
回复 2楼 纯蓝之刃
D:\VScode>test1
lmw
lmw浣犲ソ

请问,你可以输出吗?我这边输入lmw,输出是上面这个。

借用一下侯捷的话:勿在浮沙筑高台。
2020-04-13 13:21
吕孟伟
Rank: 8Rank: 8
等 级:贵宾
威 望:27
帖 子:200
专家分:870
注 册:2018-10-4
得分:0 
回复 2楼 纯蓝之刃
对不起,打扰了,是我的错。编译器没设置好。
我用的的gcc,遇到中文应该设置编码格式。
gcc main.c -fexec-charset=gbk -o main

借用一下侯捷的话:勿在浮沙筑高台。
2020-04-13 13:40
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:7 
p是野指针
gets会向p指定的内存写入数据
p不确定指向什么地方 写入数据有可能导致多种不同错误

https://zh.
2020-04-13 14:18
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
回复 2楼 纯蓝之刃
可以char *q = "你好";使用。这个只能在指针初始化的时候使用

不会的 没限制只能初始化的时候使用
其他地方 q = "123"; puts(q); 是正常的

https://zh.
2020-04-13 14:20
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:0 
回复 6楼 lin5161678
是的,我刚才没组织好语言。
是可以在其他地方使用双引号赋值的,
这个相当于先定义了一个"  "的常数,然后指针指向这个常数的首地址。
在任意位置都可以,不过这个只能这么操作一次,否则常量的指针地址丢失。

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-04-13 15:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501015-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.202357 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved