C语言学习--二维字符串

二维字符数组一般用于存储和处理多个字符串,二维字符数组中的每一行均可存储表示一个字符串。

目录

二维字符串的定义

二维字符串的初始化

二维字符串的输入

二维字符串的输出


二维字符串的定义

二维字符数组的定义格式为:

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"};
相关推荐
Yue丶越1 小时前
【C语言】字符函数和字符串函数
c语言·开发语言·算法
小白程序员成长日记2 小时前
2025.11.24 力扣每日一题
算法·leetcode·职场和发展
有一个好名字2 小时前
LeetCode跳跃游戏:思路与题解全解析
算法·leetcode·游戏
roman_日积跬步-终至千里2 小时前
【强化学习基础(2)】被动强化学习:学习价值函数
学习
AndrewHZ3 小时前
【图像处理基石】如何在图像中提取出基本形状,比如圆形,椭圆,方形等等?
图像处理·python·算法·计算机视觉·cv·形状提取
逢考必过@k3 小时前
6级550学习ing
学习
蓝牙先生3 小时前
简易TCP C/S通信
c语言·tcp/ip·算法
陈天伟教授4 小时前
基于学习的人工智能(7)机器学习基本框架
人工智能·学习
Z***G4795 小时前
网络爬虫学习:借助DeepSeek完善爬虫软件,实现模拟鼠标右键点击,将链接另存为本地文件
爬虫·学习·计算机外设
稚辉君.MCA_P8_Java6 小时前
Gemini永久会员 Java中的四边形不等式优化
java·后端·算法