动态输入多个字符串
指针数组定义:数组中每个元素都是指针类型;(虽然教材上写的定义指针数组是char *a[10]
,但不建议这样写,因为这样会误认为指向的是char类型的数据,建议写成char* a[10]
,表示a是存储10个char*
类型的数组)
问题
比如输入n个字符串并原样输出,你会发现无法输出
#include<stdio.h>//反面教材
#include<string.h>
int main(void)
{
int n,i;
char *s[10];
char str[10];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&n);
}
for(i=0;i<n;i++)
{
scanf("%s",str);
strcpy(s[i],str);
}
for(i=0;i<n;i++)
printf("%s",s[i]);
return 0;
}
原因
在定义时,定义的是char *a[10]
,意思是定义了可以存10个char*
指针的数组,那么数组中存放的就是指针,也可说是地址,那么地址不是char
类型,自然就不能用于存放字符串,可以通过动态申请空间来存入多个字符串
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
int i,j,n,count;
char *com[20],str[100000];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",str);
com[i]=(char*)malloc(sizeof(char)*(strlen(str)+1));
strcpy(com[i],str);
}
for(i=0;i<n;i++)
{
printf("%s",com[i]);
}
}
注 1.初始化时对指针数组赋值,将会自动申请空间
2.指针要到不得已的时候再用