C中的二维数组字符

帮助我摆脱这个问题。 我在ubuntu12.04上使用GCC。 当我编写这个程序从键盘n获取5个字符串然后在屏幕上打印这些字符串。 程序已编译但在执行期间它从键盘获取字符串但仅打印最后一个字符串。 我写的程序如下:

void main() { char names[10]; int i,j; for(i=0;i<5;i++) { printf(" Enter a name which you want to register\n"); scanf("%s",names); } for(i=0;i<5;i++) printf(" the names you enter are %s\n", names); } 

1)您可以这种方式使用2D char数组

 char name[5][100]; 

2D数组中的每一行都是char数组,其大小为100

 for(i=0;i<5;i++) { printf(" Enter a name which you want to register\n"); scanf("%99s",names[i]); } 

2)你可以用这种方式使用指针数组

 char *name[5]; 

数组中的每个元素都是一个指向字符串(char数组)的指针。 你必须在调用scanf()之前将数组中的每个指针分配给一个内存空间

 for(i=0;i<5;i++) { names[i]=malloc(100); printf(" Enter a name which you want to register\n"); scanf("%99s",names[i]); } 

3)如果使用gcc和gcc version> 2.7进行编译,则scanf()可以使用"%ms"而不是"%s"来分配内存

 char *name[5]; for(i=0;i<5;i++) { printf(" Enter a name which you want to register\n"); scanf("%ms",&names[i]); } 

有一个关于在char数组中读取和保持字符串的简单示例。

 #include  const int MACRO = 6; int main() { printf("Hello Admin Please Enter the Items:\n"); char items[MACRO][20]; for (int i = 0; i < MACRO; ++i) { scanf("%19s", items[i]); } for (int i = 0; i < MACRO; ++i) { printf("%s ", items[i]); } return 0; } 

这是我用指针编写的代码。

 #include  void main() { char *string[100]; int ln; printf("Enter numbar of lines: "); scanf("%d",&ln); printf("\n"); for(int x=0;x 

另一个使用二维数组的代码

  #include  void main() { int ln; printf("Enter numbar of lines: "); scanf("%d",&ln); printf("\n"); char string[ln][10]; for(int x=0;x