我想创建一个字符串数组 以下是程序
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]);
键盘接受六个字符串,但输出中没有显示任何内容。 有人可以帮我从这里出去吗? 谢谢!
答案 0 :(得分:4)
s[i]=str;
您要为所有str
分配相同的s
。打印时所有字符串都相同。如果由于某种原因,最后一个字符串为空,则所有字符串都为空。
此外,您应该在第二次循环之前将n
重置为5
。
while(n--)
{
scanf("%s",str);
if(i >= 6) break; /* 1. Can not go beyond 6 */
s[i]=malloc(strlen(str) + 1); /* 2. Allocate */
if(s[i]) strcpy(s[i], str); /* 3. Copy */
i++;
}
n = 5; /* 4. reset */
for(i=0;i<n;i++)
printf("%s\n",s[i]);
...
for(i = 0; i < n; i++) free(s[i]); /* 5. free */
答案 1 :(得分:3)
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] );
while循环最好写为for循环
for ( i = 0; i < n; i++ )
{
scanf("%9s", str );
strcpy( s[i], str );
}
另外要注意,如果您的编译器支持可变长度数组,并且数组是函数的局部变量(例如main),您可以通过以下方式定义它
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];