关于“c语言从键盘输入字符串到指针数组”的问题

今天敲了一段代码,遇到了从键盘输入多个字符串到指针数组的问题,在程序执行的时候出现了段错误的提示。本文主要涉及到了以下知识:


  • 数据的存储
  • 数组和指针

1.字符串常量的存储

c语言中字符串常量存储在静态数据区,并且有字符串结束符,直到程序运行结束它才会被销毁,所以在程序中我们把一个字符串常量赋值给一个字符指针,如:

char *pChar = "Hello World!";

其中,”Hello World!”是一个字符串常量,pChar是一个字符指针。该句相当于将字符’H’在静态数据区中的地址赋给pChar。此时,字符串常量”Hello World!”只有一份存储在静态数据区。

另外一种常见的类型是将一个字符串常量赋值给一个字符数组,而其余上面的指针形式有本质上的区别,如下:

char str[] = "Hello World!";

其中,”Hello World!”是一个字符串常量,str是一个字符数组。此时,程序会将字符串常量”Hello World!”拷贝一份到栈区(如果str是局部变量),从此将于字符串常量”Hello World!”再无联系。

2.从键盘输入字符串

从上面可以看出,我们可以给一个字符指针赋一个字符串常量,因为字符串常量在内存中真实存在且有其地址。而从键盘输入则不然,我们必须先分配一些空间用来存储键盘输入的字符串,例如:

char* str = (char*)malloc(sizeof(char) * 100);
scanf("%s", str);

这样我们输入的字符串就会存储在str所指向的动态空间内。对指针数组的赋值参考以上即可。

  • 18
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值