注册 登录
编程论坛 C语言论坛

字符指针不用键盘赋值么

海底石 发布于 2020-04-13 12:32, 1533 次点击
#include<stdio.h>

int main()
{   
    char *p;
    gets( p);
    printf("%s" , p);
    p = "你好";
printf("%s" , p);
    return 0;
}
6 回复
#2
纯蓝之刃2020-04-13 12:55
程序代码:
#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.返回地址。
这样就保证了返回的首地址后有足够的空间存储字符串,不会产生指针越界的问题了。
#3
吕孟伟2020-04-13 13:21
回复 2楼 纯蓝之刃
D:\VScode>test1
lmw
lmw浣犲ソ

请问,你可以输出吗?我这边输入lmw,输出是上面这个。
#4
吕孟伟2020-04-13 13:40
回复 2楼 纯蓝之刃
对不起,打扰了,是我的错。编译器没设置好。
我用的的gcc,遇到中文应该设置编码格式。
gcc main.c -fexec-charset=gbk -o main
#5
lin51616782020-04-13 14:18
p是野指针
gets会向p指定的内存写入数据
p不确定指向什么地方 写入数据有可能导致多种不同错误
#6
lin51616782020-04-13 14:20
回复 2楼 纯蓝之刃
可以char *q = "你好";使用。这个只能在指针初始化的时候使用

不会的 没限制只能初始化的时候使用
其他地方 q = "123"; puts(q); 是正常的
#7
纯蓝之刃2020-04-13 15:28
回复 6楼 lin5161678
是的,我刚才没组织好语言。
是可以在其他地方使用双引号赋值的,
这个相当于先定义了一个"  "的常数,然后指针指向这个常数的首地址。
在任意位置都可以,不过这个只能这么操作一次,否则常量的指针地址丢失。
1