二维字符数组一般用于存储和处理多个字符串,二维字符数组中的每一行均可存储表示一个字符串。
目录
二维字符串的定义
二维字符数组的定义格式为:
char 数组名[第一维大小][第二维大小];
- 第一维:字符串数组的个数
 - 第二维:对应字符串的长度
 
            
            
              cpp
              
              
            
          
          char c[3][10]; //定义了一个3行10列的二维字符数组c
        由于该二维数组的每一行 c[0]、c[1]、c[2] 均是含有 10 个元素的一维字符数组,即二维数组的每一行均可表示一个字符串。
二维字符串的初始化
通常情况下,二维数组的每一行分别使用一个字符串进行初始化。 例如:
            
            
              cpp
              
              
            
          
          char c[3][8]={{"apple"},{"orange"},{"banana"}};
等价于
char c[3][8]={"apple","orange","banana"};
char c[][8]={"apple","orange","banana"};
        可以不用写行。
|   0    | 1 | 2 | 3 | 4 | 5 |  6  |  7  |
| c[0] | a | p | p | l | e | \0 | \0 | \0 |
| c[1] | o | r | a | n | g |  e  | \0 | \0 |
| c[2] | b | a | n | a | n | a | \0 | \0 | 
|---|
\0相当于空格,在计算系统自动补全的空格时候,是不会计算的。
            
            
              cpp
              
              
            
          
          #include<stdio.h>
#include<string.h>
int main (void){
	
	char c[3][8]={"apple","orange","banana"};
	int i;
	for(i=0;i<3;i++){
		printf("%d\n",strlen(c[i]));
	}
		
	return 0;
}
        
二维字符串的输入
注意,这里的结尾会默认是换行,scanf输入的时候是以换行符结束,但是会读入'\n',使用getchar消除
            
            
              cpp
              
              
            
          
              char str[5][81];
    for(int i=0;i<5;i++){
        scanf("%s",str[i]);
        getchar();
        //gets(str[i]);
        
    }//得到了二维字符串数组str
        二维字符串的输出
            
            
              cpp
              
              
            
          
              for(int i=0;i<5;i++){
        printf("%s\n",str[i]);
    }
        【例 1】 分析以下程序,输出其运行结果。
            
            
              cpp
              
              
            
          
          #include<stdio.h>
int main (void){
    char c[3][5] = {"Apple","Orange","Pear"};
    int i;
    for(i=0;i<3;i++)
        printf ("%s\n",c[i]);
    return 0;
}
        该数组各元素中的值如下所示。
|        | 0 | 1 | 2 | 3 |  4  |
| c[0] | A | p | p | l |  e  |
| c[1] | O | r | a | n |  g  |
| c[2] | P | e | a | r | \0 | 
|---|
printf ("%s\n",c[0]); //输出AppleOrangPear
printf ("%s\n",c[1]); //输出OrangPear
printf ("%s\n",c[2]); // Pear
运行结果为:
AppleOrangPear
OrangPear
Pear
因为printf再输出字符串的时候,会以系统空格 '\0'为结尾。
要解决这个问题只需要扩大内存即可。
            
            
              cpp
              
              
            
          
          char c[3][7] = {"Apple","Orange","Pear"};