news 2026/7/31 5:53:38

C语言基础:字符数组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言基础:字符数组

一维字符数组

应用 : 存储字符串。

1.定义:

类型 数组名[整形常量]; 整形常量 数组的容量,表示可以储存多少个字符 类型 char c语言规定,字符串必须使用\0 作为结束标准。 如果你要在数组中储存一个 hello , hello\0 共计6个字符空间 char string[100]; ​ ​

2.访问

数组名[整形表达式]

str[0] = 'a';

char c =str[0];

使用下标 运算符 [] ,整形表达式 ,常量,变量,表达式-》 整形 。

下标从 0 开始,下标的范围 ,0 - 有效长度 (从下标0 开始 到字符串\0 之前的有效字符长度);

字符数组 也是数组,不能整体操作 。除非调用函数。

char str[10]; str ="hello"; // error 不能整体赋值。
// 访问 写入 // 下标从0 开始, 长度 5 ,从下标0 开始 到字符串\0 之前的有效字符长度 str[0] = 'h'; // str[0] char str[1] ='e'; str[2] ='l'; str[3] ='l'; str[4] ='o'; str[5] ='\0'; // \0 不可以省略 , ​ // 读出 数组元素 putchar(str[0]); // h printf("%c\n",str[1]);//e char c = str[4]; // 字符数组 ,不可整体操作 //str = "world"; puts(str); // 字符串整体输出 ,被输出的字符串一定是以\0 结尾 printf("str is %s\n",str);

3.初始化

// 全部初始化 char str1[6]={'h','e','l','l','o','\0'}; // 'a' 字符常量 1字符 1byte char str2[6]={"hello"}; // "hello" 字符串常量,默认是有\0 char str3[6]="hello"; // 用的多 ​ // 局部初始化 ,剩下没有给处值的,都是\0 char str4[10]={'h','e','o','\0'}; // \0 建议手动加上。 char str5[10]={"hel"}; char str6[10]="hello"; // 常用 char str7[10]={0}; // 常用,空串 ​ 0; // 数字0 '\0' ; //字符串结束标志 0 == ‘\0’ 在内存中存储的 都是 0 '0'; //字符0 ascii 48 0x30 ​ char str8[]={'h','e','l'};// 不是字符串,字符数组,没有\0 char str9[]={"hello"}; char str10[]="hello"; char str11[]={0}; // 不要写成这种,
  1. 遍历

char str[10]={0}; printf("sizeof str[10] is %lu\n",sizeof(str)); printf("sizeof str[0] is %lu\n",sizeof(str[0])); int i = 0 ; int len = 0 ; // 遍历的输入 for(i=0;i<10 - 1 ;i++) // \0 { scanf("%c",&str[i]); if('#' == str[i]) { break; } len++; ​ } str[len]='\0'; //遍历的输出 for(i=0;i<len;i++ ) // { putchar(str[i]); } ​
  1. 字符串相关的常用函数

    函数名功能备注
    strlen获得字符串有效字符长度 size_t strlen(const char *s);
    strcpy字符串的复制,从一个数组到另一个数组 char *strcpy(char *dest, const char *src);
    strcat字符串的拼接 char *strcat(char *dest, const char *src);
    strcmp字符串的比较,比较字符串的内容是否一致 int strcmp(const char *s1, const char *s2);
strlen char str[100]={0}; // char [] char * printf("input string:"); gets(str); //int len = strlen(str); // 有效字符的个数 // int len = 0; ​ while(1) { if('\0'!=str[len]) { len++; } else { break; } } ​ 注意: strlen 和sizeof 的区别 1. strlen ,函数 ,需要外部支持 , c语言标准库 sizeof 关键字 ,不需要额外的支持 ,直接就能用 2. 相对字符数组 strlen ,有效字符的个数, 单位字节 sizeof ,获得数组在内存中的大小, 单位字节
strcpy int main() { //char str1[100]="hello"; char str1[100]={0}; printf("input string:"); gets(str1); char str2[100]={0}; ​ // 不能整体操作 // str2 = str1; // 把str1 的内容 复制到 str2 //strcpy(str2,str1); int i = 0 ; while(1) { str2[i] = str1[i]; if('\0' == str1[i]) { break; } i++; } puts(str2); return 0; } 注意: 目标数组的大小,要能容纳的下,源数组的的内容。否则 ,数组越界。后续行为不确定(可能可以继续运行,也可能程序崩溃,但从逻辑上,已经错误)。 ​

strcat ​ int main() { ​ char str1[100]="hello";//dst char str2[100]=",world";//src //strcat(str1,str2); // int i = 0 ; int j = 0 ; while(1) // 找到 str1的结束的地方 { if('\0'!=str1[i]) { i++; } else { break; } } ​ while(1)// 开始拼接 { str1[i] = str2[j]; if('\0' == str2[j]) { break; } i++; j++; } printf("strcat str1:%s\n",str1); ​ } ​

strcmp 比较两个字符串的内容是否一致 ​ int main() { char str1[100]="hello"; char str2[100]="aaaaa"; char str3[100]="hello"; ​ // 不能写成这样,这个不是比较 str1,str2 的字符串内容 /* if(str1 == str2) { }*/ #if 0 // 系统函数的使用 int ret = 0; ret = strcmp(str1,str2); printf("str1 cmp str2 ret %d\n",ret); ​ ret = strcmp(str1,str3); printf("str1 cmp str3 ret %d\n",ret); #endif ​ int i = 0 ; int ret = 0 ; while(1) { ret = str1[i] - str3[i]; if(0==ret && str1[i]!='\0') { i++; } else { break; } } printf("ret is %d\n",ret); ​ } ​ ​

二维字符数组

应用:

存储多个字符串。

二维数组, 可以被称为 数组的数组。 数组的元素又是一个数组的结构。

语法定义:

数据类型 数组名[行数][列数]; 一维数, 二维数 , 行数,列数,整型常量

char str[3][100] ;

访问, 通过下标运算符 [], 从0 开始,表示第一个元素。 不要越界

char str[3][100] ; 最后一个元素的下标位置 str[2][99] ​ str[0] ,表示第一个字符数组 ,数组名 str[0][0], 表示第一个字符数组里的第一个字符元素

存储 特性:

  1. 单一性

  2. 连续性

  3. 有序

初始化

char str1[3][50]={"hello","ok","how"}; char str2[3][50]={{"hello"},{"ok"},{"how"}}; char str3[3][50]={0} ; // 常用 char str4[3][50]={{0}}; char str5[][50]={"hello","ok","123"}; //一维大小可以省略,二维不能省 //char str6[3][]={"hello","ok","123"}; ​

字符串 逆序,排序

//逆序 for(i=0;i<size/2;i++) { strcpy(t,str[i]); strcpy(str[i],str[size-1-i]); strcpy(str[size-1-i],t); } ​ //排序 sort int j = 0 ; for(j=size-1;j>0;j--) { for(i=0;i<j;i++) { if(strcmp(str[i],str[i+1])>0) { strcpy(t,str[i]); strcpy(str[i],str[i+1]); strcpy(str[i+1],t); } } } ​
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 5:49:02

终极简单视频下载助手:一键保存网页视频的免费解决方案

终极简单视频下载助手&#xff1a;一键保存网页视频的免费解决方案 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否经常在网上看到精彩…

作者头像 李华
网站建设 2026/7/31 5:48:42

2026年5款主流AI招聘工具自费实测:不吹不黑,企业选型如何避坑?

开篇说明&#xff1a;测评背景与核心维度 进入2026年&#xff0c;AI招聘工具已经从前沿概念变成了企业人力资源部门的刚需标配。然而&#xff0c;面对市场上铺天盖地的营销通稿&#xff0c;很多HR和技术负责人在选型时一头雾水。为了给团队寻找一款真正靠谱的自动化招聘系统&am…

作者头像 李华
网站建设 2026/7/31 5:48:33

从文档切分到Agent穿甲——LangChain 1.0五步造一个会干活的生产级AI

从文档切分到 Agent 穿甲——LangChain 1.0 五步造一个会干活的生产级 AI 你是不是也卡在这五步上&#xff1f; 想做一个企业级 AI Agent&#xff0c;搜了一堆教程&#xff0c;学了文档切分、Embedding、RAG、Tool、中间件——但每个都是孤立的知识点&#xff0c;串不起来&…

作者头像 李华
网站建设 2026/7/31 5:48:22

Windows IP地址冲突:从原理到根治的完整排查指南

1. 问题初探&#xff1a;当Windows弹出那个恼人的黄三角“Windows检测到IP地址冲突”。这个带着黄色感叹号的弹窗&#xff0c;恐怕是很多朋友在办公室、家里甚至咖啡馆连Wi-Fi时都遭遇过的“不速之客”。它不请自来&#xff0c;轻则让你当前的网络连接瞬间中断&#xff0c;重则…

作者头像 李华
网站建设 2026/7/31 5:47:16

零成本中文情感分析:Xiaothink-T7.5-0.1B API实战指南

1. 项目概述&#xff1a;零成本中文情感分类的实战价值中文情感分析作为自然语言处理的基础应用场景&#xff0c;在电商评价、舆情监控、客服质检等领域具有广泛需求。传统方案要么需要自建模型消耗大量算力&#xff0c;要么调用商业API产生高昂费用。Xiaothink-T7.5-0.1B作为最…

作者头像 李华
网站建设 2026/7/31 5:46:33

STM32驱动JQ8400语音模块:串口通信协议与嵌入式语音播报实战

1. 项目概述&#xff1a;让STM32开口说话 最近在做一个智能家居的小项目&#xff0c;需要设备在特定事件发生时能发出语音提示&#xff0c;比如“门窗已打开”、“温度过高”。直接让单片机“说话”不现实&#xff0c;所以外挂一个语音模块就成了最经济实用的方案。在众多语音芯…

作者头像 李华