C 没有字符串数组的输出
我想创建一个字符串数组 下面是节目C 没有字符串数组的输出,c,string,pointers,C,String,Pointers,我想创建一个字符串数组 下面是节目 char *s[6]; int n=6,i=0; char str[10]; while(n--) { scanf("%s",str); s[i]=str; i++; } for(i=0;i<6;i++) printf("%s\n",s[i]); char*s[6]; int n=6,i=0; char-str[10]; 而(n--) { scanf(“%s”,str); s[i]=str; i++; }
char *s[6];
int n=6,i=0;
char str[10];
while(n--)
{
scanf("%s",str);
s[i]=str;
i++;
}
for(i=0;i<6;i++)
printf("%s\n",s[i]);
char*s[6];
int n=6,i=0;
char-str[10];
而(n--)
{
scanf(“%s”,str);
s[i]=str;
i++;
}
对于(i=0;i
您正在为所有s
分配相同的str
。所有字符串在打印时都是相同的。如果由于某种原因最后一个字符串为空,则所有字符串都将为空
此外,在第二次循环之前,您应该将n
重置为5
修复
while(n--)
{
scanf(“%s”,str);
如果(i>=6)中断;/*1.不能超过6*/
s[i]=malloc(strlen(str)+1);/*2.分配*/
if(s[i])strcpy(s[i],str);/*3.复制*/
i++;
}
n=5;/*4.重置*/
对于(i=0;i而言,str
的地址是固定的
s[i]=str;
字符指针数组的每个元素都获得相同的地址。
您至少可以通过以下方式更改代码段
#include <string.h>
//...
#define N 6
//...
char s[N][10];
int n = N, i = 0;
char str[10];
while ( n-- )
{
scanf("%9s", str );
strcpy( s[i], str );
i++;
}
for( i = 0; i < N; i++ )
puts( s[i] );
int n;
printf( "Enter the number of strings you are going to enter: " );
scanf( "%d", &n );
if ( n <= 0 ) n = N;
char s[n][10];
#包括
//...
#定义n6
//...
字符s[N][10];
int n=n,i=0;
char-str[10];
而(n--)
{
scanf(“%9s”,str);
strcpy(s[i],str);
i++;
}
对于(i=0;i
while循环最好作为for循环编写
for ( i = 0; i < n; i++ )
{
scanf("%9s", str );
strcpy( s[i], str );
}
(i=0;i
{
scanf(“%9s”,str);
strcpy(s[i],str);
}
还要注意的是,如果编译器支持可变长度数组,并且数组s是函数的局部变量(例如main),那么可以用以下方法定义它
#include <string.h>
//...
#define N 6
//...
char s[N][10];
int n = N, i = 0;
char str[10];
while ( n-- )
{
scanf("%9s", str );
strcpy( s[i], str );
i++;
}
for( i = 0; i < N; i++ )
puts( s[i] );
int n;
printf( "Enter the number of strings you are going to enter: " );
scanf( "%d", &n );
if ( n <= 0 ) n = N;
char s[n][10];
intn;
printf(“输入要输入的字符串数:”);
scanf(“%d”和“&n”);
如果(nn
在for循环的开始处为0。您的所有字符串也将指向最后一个扫描的字符串。char*s[5];
可以容纳五个字符串(char*
)。谢谢!是否可以不进行动态分配?@Ravi yes使用char[6][最大字符串长度]
,但您仍然需要strcpy
或直接阅读s[i]
@MohitJain您不知道strdup()吗?@Heathunnicutt Yesstrdup
适用于unix类型的系统(请确保最后释放)。但您必须同时注意,它不是ISO C标准本身的一部分,是POSIX扩展。@MohitJain当然最后必须释放它,就像malloc()一样。我不是问它是否有效,而是指出它更好。