字符数组:C语言程序员的必修课(附防坑指南)

C语言实用干货:深度解剖字符数组 / 能住10个字符的"宿舍楼"这个"宿舍楼"有10个"房间"(元素),编号从0到9(C语言从0开始数数,程序员的第一课就是学会从0开始数数)。务必指定大小: 房子(内存空间)不提前规划好,队伍(字符)就住不进去或者乱占地盘(内存溢出)!内存是连续的: 字符数组在内存中是一个挨一个的格子间。str[0]是首字母,"邻居"是str[1],以此类推。大小限制是硬道理: char my_word[6];最多放5个可见字符+1个神秘终结者(后面讲)。想放"HelloWorld"? 阅读详情

目录

字符数组的"身份证"

字符数组本质上就是个char类型的旅馆!每个房间(元素)只能住一个字符,而且必须给结束符\0预留床位(重要的事情说三遍:结束符!结束符!结束符!)。比如要存"Hello",需要至少6个元素的数组:

char str[6] = {'H','e','l','l','o','\0'}; // 标准写法
char str[] = "Hello";  // 编译器自动加\0(偷懒写法)

5种初始化姿势大比拼

  1. 静态初始化(适合已知内容)
char password[9] = {'p','@','s','s','w','0','r','d','\0'};
  1. 动态赋值(运行时才知道内容)
char username[20];
for(int i=0; i<5; i++){
    username[i] = 'A' + i; // 生成ABCDE
}
username[5] = '\0'; // 千万别忘!!!
  1. 字符串常量赋值(最常用)
char error_msg[] = "File not found!"; // 自动计算长度
  1. 指针混搭法(高阶玩法)
char *p = "Hello World"; // 其实指向常量区
char arr[] = "Hello World"; // 这才是真数组
  1. 部分初始化(危险操作)
char buffer[10] = {'a','b'}; // 剩余元素自动补0(即\0)

输入输出的那些坑

scanf的三大罪状

char name[5];
scanf("%s", name); // 输入"Jackson"直接崩!(缓冲区溢出)

推荐使用fgets保平安:

fgets(name, sizeof(name), stdin); // 自动限制长度

puts与printf的爱恨情仇

char str[] = "Hello\0World"; 
puts(str);      // 输出Hello(遇到\0就停)
printf("%s", str); // 同上
printf("%c", str[6]); // 输出'r'(证明数据还在)

新手必踩的3个深坑

坑1:忘写结束符

char arr[5] = {'H','e','l','l','o'}; // 没有\0!
printf("%s", arr); // 输出hello+乱码(直到遇到内存中的0)

坑2:数组越界

char str[3] = "C++"; // 正确写法是str[4]
// 实际内存:'C' '+' '+' '\0'(越界写入!)

坑3:单引号双引号混淆

char ch = "A"; // 错误!应该用单引号'A'
char str = 'ABCD'; // 错上加错!

实战:字符串反转

#include <stdio.h>
#include <string.h>

void reverse_string(char str[]) {
    int len = strlen(str);
    for(int i=0; i<len/2; i++){
        char temp = str[i];
        str[i] = str[len-1-i];
        str[len-1-i] = temp;
    }
}

int main() {
    char text[] = "emocleW ot efil";
    reverse_string(text);
    printf("%s", text); // 输出"life to Welcome"
    return 0;
}

总结清单

  • ✅ 数组长度 >= 字符串长度+1
  • ✅ 输入用fgets代替gets/scanf
  • ✅ 操作前检查数组边界
  • ✅ 处理完手动添加\0
  • ✅ 慎用strcpy/strcat等危险函数

(终极提示)字符数组就像女朋友——你得时刻注意她的边界,及时表达终止意向(\0),还要小心她突如其来的脾气(缓冲区溢出)!

C语言:字符数组 目录1. 字符数组定义及初始化 1. 字符数组定义及初始化 //不预定数组长度,根据提供的初值,自动 char c[] = {&amp;amp;amp;quot;I love C&amp;amp;amp;quot;}; //预定数组长度 char c[100] = {&amp;amp;amp;quot;I love C&amp;amp;amp;quot;}; ... 阅读详情

相关推荐

114.Android简单的动态切换app的图标,两种方式

- 默认的图标-->-- 需要切换的图标-->android:label="短信"-- 默认activity-->

曹二少的博客 5572

C语言数组——字符数组

C语言目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分析 VS2019编写简单的C程序示例 简单示例,VS2019调试C语言程序 C语言基础-基本算法 C语言基础-数据类型 C语言中的输入输出函数 C语言流程控制语句 C语言数组——一维数组 C语言数组——二维数...

专注于C语言编程干货分享 2万+

Audio2Face进阶玩法:结合LiveLink在UE5中实现MetaHuman全身动画+语音驱动(保姆级配置指南)

本文提供了一份详尽的保姆级教程,指导如何将NVIDIA Audio2Face与Unreal Engine 5的LiveLink功能结合,实现驱动MetaHuman数字人面部表情的同时,无缝融合身体动画。文章详细讲解了从环境准备、插件部署、基础面部驱动测试,到动画蓝图高级配置与多数据流融合的全流程,并分享了性能优化与问题排查的实战经验,旨在帮助创作者打造表情与肢体动作协调统一的生动数字人。

q9w8e7r6t5的博客 196

C语言之字符数组

本篇是针对网上学习字符数组的知识点的总结。更新了有关gets()函数的问题。

weixin_73293671的博客 3万+

iOS自动化之打包-xcodebuild命令行打包.app并安装到ios模拟器

xcode xcodebuild xcrun ios模拟器 iOS UI自动化测试 ios自动打包安装到ios模拟器

z12347891的博客 5073

2d游戏地图编辑器_[U3D]基于MarchingCubes实现的War3Editor 地表/悬崖编辑器

花了几天时间研究清楚Marching cubes后,发现这个方法是一个非常适用于地图编辑,网格编辑,procedural 生成的工具。最大的优点有着较好的边缘,表面处理。然后我用U3D写了一个悬崖/地表的编辑器。其中使用到了Marching Cubes的2.5D,2D两种降维的方法。talk is cheap,让我看效果!DemoEditor展示https://www.zhihu.com/vide...

weixin_42504649的博客 1178

c语言字符数组及使用方法

c语言字符串及使用方法一、字符数组和字符串二、字符数组的输入三、字符数组的输出四、C 语言字符串处理函数1、字符串连接函数 strcat() 一、字符数组和字符串 用来存放字符的数组称为字符数组,例如: 1. char a[10]; //一维字符数组 2. char b[5][10]; //二维字符数组 3. char c[20] = { 'c', ' ', 'p', 'r', '...

qq_45930294的博客 4万+

AWS 小白书 [1] 全球架构

小白应该知道的 AWS 知识

boshansolo的博客 703

C语言:字符数组赋值

字符数组:C语言学习中较麻烦的部分,C语言中没有字符串这种类型的数组,字符串只能存储在字符型数组中。

DouXiulu的博客 1万+

HRnet的pytorch实现

HRnet的pytorch实现

奋土的博客 1953

【nvidia-B200】实际生产报错NVRM: nvAssertFailedNoLog: Assertion failed: pIOVAS != NULL @ io_vaspace.c:601

升级 NVIDIA 驱动到 R545/R550 数据中心版本(解决 IOVA bug,这是性能差的根本原因);重启服务器(清理驱动残留资源,消除日志中的 NVRM 错误);验证 NVLink/PCIe 链路(确保 8 卡互联使用高速链路,而非单卡 PCIe 共享带宽)。完成这 3 步后,ncccl-test的all_reduce带宽应能提升至100GB/s 以上(取决于服务器的 NVLink/NVSwitch 配置),恢复正常性能。

jundao1997的专栏 647

C语言中字符数组初始化的几种方法

1.C语言中的字符数组初始化 在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针。 1.1 直接逐个初始化字符数组:字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。 char strr[] = {'I',' ','a','m',' ','h','a','p','p','y'}; 1 注意:如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即’\0’)。 ..

weixin_45511052的博客 2万+

〔重庆理工大学〕操作系统实验指导书【实验三 系统调用】

本实验指导书详细介绍了在Linux 0.11系统中添加两个自定义系统调用(iam()和whoami())的完整流程。实验内容包括:修改unistd.h添加系统调用号,更新sys_call_table数组,实现内核函数sys_iam()和sys_whoami(),以及编写测试程序验证功能。关键步骤涉及用户态与内核态数据传递、系统调用号分配、中断处理机制等核心概念。实验要求学习者通过修改内核源码、理解系统调用原理,最终实现名字存储与读取功能,并完成测试验证。实验还提供了视频学习资源和参考书籍,帮助深入理解操作系

Pretty Boy Fox的博客 1289

C语言 字符数组 和 字符串 详解

C语言 字符数组 和 字符串 详解 用来存放字符的数组称为字符数组,例如: char a[10]; //一维字符数组 char b[5][10]; //二维字符数组 char c[20]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a','m'}; // 给部分数组元素赋值 char d[]={'c', ' ', 'p', 'r', 'o', 'g', 'r'...

weixin_45691686的博客 7878

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C语言中字符数组的初始化与赋值

C语言中字符串的初始化赋值及其他操作

2Know的博客 10万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C语言中字符串和字符数组的区别

C语言中字符串和字符数组的区别1、基本概念2、代码分析3、总结 1、基本概念 字符串和字符数组很相似,但是有本质上的区别。 (1) C语言中,字符串是双引号括起来的单个或多个字符的集合,编译器自动在结尾加上’\0’字符。字符串常量存储在只读数据段,无法通过指针进行修改字符串中的某个字符。 (2)C语言中,不能定义字符串(没有string关键字,只要C++才有),但是在C语言中使用字符串,通常会用字符数组来模拟字符串,必须是’\0’结尾的字符数组,这个字符数组存储通常会分配在栈区,可以被称为字符串,且该字符串

我是你的峰哥哥啊的博客 8405

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C语言字符数组

一、C语言中的字符串 字符串:由零个或多个字符组成且通过 双引号括起来的有限序列就叫做字符串。 在C语言中没有字符串类型,故我们用 字符数组来处理字符串。 二、字符数组的定义 因为字符数组是存放字符的数组,故其 与数组定义类似。其定义一般为: char a[10]; 表示定义了10个字节的连续内存空间。 三、字符数组的初始化 我们使用字符串来初始化化字符数组。 char a[20]={"Hell...

Hierarch的博客 1万+

【C语言】字符数组的定义及使用

字符型数据是以字符的ACSII代码存储在代码单元格中的,一般占一个字节。由于ASCII代码也属于整数形式,所以C99标准中,把字符类型归纳为整形类型中的一种。用来存放字符型数据的数组称为字符型数组,在字符数组中一个元素内存放一个字符。定义字符型数组的方法与定义数值型数组的方法类似,例如:由于字符型数组是以整数形式存放的,也可以用整形数组来存放字符型数据,缺点就是浪费空间,一个字符只占一个字节,而一个整形数据占四个字节,将字符放在整形数组中会浪费空间。

Mr_star_galaxy的博客 1万+

C语言 字符数组

C语言 字符数组

qq_48516121的博客 1万+

C语言输入未知长度字符数组

重新捡起学习C语言系列 C语言输入未知长度字符数组 问题描述:在最基础的C语言中使用scanf()函数简单输入一行长串字符数组,以回车结束。储存每一个字符以参与后面的运算,或者将他们打印下来。 细节问题 回车(enter)结束——指的是以字符’\n’结束; 输入采用%c而不是%s,因为后面会运用他们计算。 用到的语法 for: while: do..while: if...break: 代码 ...

weixin_41569530的博客 3万+

C语言字符数组、指针总结

C语言字符数组、指针总结

qq_48017759的博客 5283

C语言 —— 字符串与字符数组

字符串与字符数组

weixin_45767909的博客 7989

字符数组初始化c语言,C语言字符数组

C语言字符数组初始化教程C语言字符数组初始化一参数char arrName[count] = {'val1', 'val2', 'val3', ....};说明我们可以在 {} 写上一系列的值,用来初始化字符数组的值。C语言字符数组初始化二语法#include char arrName[count];memset(arrName, 'item', count);说明我们可以使用 memset 函数...

weixin_39658759的博客 4882

C语言中字符数组越界会怎样?

我们都知道C语言中的数组是不允许动态调整程度的,所有的数组都必须在声明的时候就指定它的长度,比如: char str[]; 就会报错: [Error] storage size of ‘str’ isn’t known 提示我数组的大小是未知的。事情是这样发生的,那是风和日丽的上午,我在家写代码,涉及到了C语言文件系统的内容,我用了一个 fgets()函数,熟悉C语言的盆友都知道,这是一个从指定的...

qq_43440960的博客 5141

C语言字符数组的初始化

1、字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'}; 即把10个字符分别赋给str[0]到str[9]10个元素 如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空

复兴之路 11万+
上一篇: Redis面试必杀技:这8个高频问题没准备就敢去面试?
下一篇: 手把手教你用Anaconda创建虚拟环境(避坑指南+实战技巧)
syntaxsage
博客等级 码龄2年 119粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值