C语言 C 中的二维字符数组

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/17466563/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 06:51:46  来源:igfitidea点击:

Two Dimensional Array of Characters in C

cc-strings

提问by ranaarjun

Help me to get out of this problem. I'm using GCC on ubuntu12.04. While I write this program to get 5 strings from keyboard n then print these strings on screen. Program is compiled but during execution it takes strings from keyboard but print only last string. The program which I have written is below:

帮助我摆脱这个问题。我在 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);  

}

回答by MOHAMED

1) you can use 2D char array in this way

1)你可以用这种方式使用二维字符数组

char names[5][100];

each line in the 2D array is an array of char with size = 100

二维数组中的每一行都是一个大小为 100 的字符数组

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

2) You can use array of pointers in this way

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

char *names[5];

each element in the array is a pointer to a string (char array). you have to assign each pointer in the array to a memory space before you call scanf()

数组中的每个元素都是一个指向字符串(字符数组)的指针。在调用之前,您必须将数组中的每个指针分配给一个内存空间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) if you compile with gcc version >2.7 then your scanf()can allocate memory by using "%ms"instead of "%s"

3) 如果您使用 gcc 版本 > 2.7 进行编译,那么您scanf()可以使用"%ms"代替而不是分配内存"%s"

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

回答by Berk Koylu

There is a simple example about reading and keeping string in the char array.

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

#include <stdio.h>

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;
}

回答by Raj Kumar

Here is the code I wrote using pointer.

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

#include <stdio.h>
void main()
{
   char *string[100];
   int ln;

   printf("Enter numbar of lines: ");
   scanf("%d",&ln);
   printf("\n");
   for(int x=0;x<ln;x++)
   {    
     printf("Enter line no - %d ",(x+1));
     scanf("%ms",&string[x]);  // I am using gcc to compile file, that's why using %ms to allocate memory.              
   }
   printf("\n\n");
   for(int x=0;x<ln;x++)
   {            
     printf("Line No %d - %s \n",(x+1),string[x]);  
   }

}   

Another code using two dimensional Array

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

    #include <stdio.h>

    void main()
    {

    int ln;

    printf("Enter numbar of lines: ");
    scanf("%d",&ln);
    printf("\n");

    char string[ln][10];

    for(int x=0;x<ln;x++){
        printf("Enter line no - %d ",(x+1));
        scanf("%s",&string[x][0]);
    }


    for(int x=0;x<ln;x++)
    {           
        printf("Line No %d - %s \n",(x+1),string[x]);   
    }



}