通过scanf给两种字符串数组(二维数组和指针数组)赋值

如何实现scanf同时输入多个字符串,有两种方式,一种是通过二维数组,一种是指针数组

char a[][10] //二维数组

char *a[ ] //多个字符串指针组成的数组

二维数组赋值多个字符串比较好操作,直接for循环遍历scanf输入即可

#include<stdio.h>
int main(){
	const int n=3;//输入3个字符为上线 
	char str[n][10];
	for(int i=0;i<n;i++){
		scanf("%s",str[i]);
	}
    //输出显示str[][]
	for(int i=0;i<n;i++){
		printf("str[%d]=%s\t",i,str[i]);
	}
	return 0;
}

而指针数组却不能直接通过scanf赋值,原因是什么?

我们先通过一维,明白字符串指针与数组的区别

指针:char *str="Hello World";

  • str是一个指针,初始化为指向一个字符串常量
  • 而char *str 实际上是const char* str,因此这个常量所在的地方是只读
  • 所以不能对str所指的字符串修改

数组:char str[]="Hello World"; 

  • Hello World所在的地方仍是只读,但str[]相当于把Hello World拷贝保存到栈空间数组里
  • 想当于,从静
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值