当前位置: 首页 > news >正文

C语言字符数组输入输出方法大全(附带实例)

在 C语言中,字符数组是一种特殊的数组,用于存储和处理字符串。理解字符数组的输入和输出操作对于初学者来说至关重要,因为这是处理文本数据的基础。

字符数组的定义与初始化

在讨论输入输出之前,我们先来回顾一下字符数组的定义和初始化方法。在 C语言中,可以使用以下方式定义和初始化字符数组:

char str1[20]; // 定义一个可容纳 19 个字符的数组(最后一个位置留给'\0')
char str2[] = "Hello"; // 定义并初始化,数组长度自动计算为 6
char str3[10] = "World"; // 定义指定长度的数组并初始化

需要注意的是,C语言中的字符串实际上是以空字符'\0'结尾的字符数组。这个空字符用于标识字符串的结束,因此在定义字符数组时,要确保数组长度比实际字符数多 1,以容纳这个结束符。

 

字符数组的输入方法

C语言提供了多种方法来输入字符数组,我们将逐一介绍这些方法,并讨论它们的优缺点。

1. 使用scanf()函数

scanf() 函数是C语言中常用的输入函数之一,它可以用来读取字符数组,但有一些限制和注意事项:

/**
*  系统学习C语言 https://xiecoding.cn/c/
**/
#include <stdio.h>int main() {char str[30];printf("请输入一个字符串:");scanf("%s", str);printf("你输入的字符串是:%s\n", str);return 0;
}

输出结果:

请输入一个字符串:Hello World
你输入的字符串是:Hello

使用 scanf() 函数输入字符数组时,有以下几点需要注意:

  • scanf() 在遇到空格、制表符或换行符时会停止读取,这意味着它无法读取包含空格的完整字符串。
  • scanf() 不会自动检查数组边界,可能导致缓冲区溢出。为了安全起见,可以使用 scanf() 的安全版本 scanf_s()(在某些编译器中可用),或者在使用 scanf() 时限制输入长度:
scanf("%19s", str); // 限制最多读取 19 个字符,留出一个位置给 '\0'
2. 使用gets()函数(不推荐)

gets() 函数可以读取包含空格的整行输入,但由于它不进行边界检查,容易导致缓冲区溢出,因此在现代 C 编程中不推荐使用。

/**
*  系统学习C语言 https://xiecoding.cn/c/
**/
#include <stdio.h>int main() {char str[20];printf("请输入一个字符串:");gets(str); // 不推荐使用printf("你输入的字符串是:%s\n", str);return 0;
}

输出结果:

请输入一个字符串:Hello World
你输入的字符串是:Hello World

3. 使用fgets()函数

fgets() 函数是一个更安全的选择,它允许你指定最大读取长度,并且可以读取包含空格的整行输入:

/**
*  系统学习C语言 https://xiecoding.cn/c/
**/
#include <stdio.h>int main() {char str[20];printf("请输入一个字符串:");fgets(str, sizeof(str), stdin);printf("你输入的字符串是:%s", str);return 0;
}

输出结果:

请输入一个字符串:Hello World
你输入的字符串是:Hello World

使用 fgets() 函数时,需要注意以下几点:

  • fgets() 会读取换行符 '\n' 并将其存储在字符数组中,如果不需要换行符,可以在读取后手动将其删除。
  • 如果输入的字符串长度超过指定的最大长度,fgets() 会自动截断字符串,确保不会发生缓冲区溢出。
4. 逐字符输入

如果需要更精细的控制,可以使用 getchar() 函数逐个字符地输入:

/**
*  系统学习C语言 https://xiecoding.cn/c/
**/
#include <stdio.h>int main() {char str[20];int i = 0;char ch;printf("请输入一个字符串(按回车结束):");while ((ch = getchar()) != '\n' && i < 19) {str[i++] = ch;}str[i] = '\0';  // 添加字符串结束符printf("你输入的字符串是:%s\n", str);return 0;
}

输出结果:

请输入一个字符串(按回车结束):hello world
你输入的字符串是:hello world 

 

字符数组的输出方法

相比输入,字符数组的输出方法相对简单,以下是几种常用的输出方法。

1. 使用 printf() 函数

printf() 函数是最常用的输出方法,使用 %s 格式说明符可以输出整个字符串:

/**
*  系统学习C语言 https://xiecoding.cn/c/
**/
#include <stdio.h>int main() {char str[] = "Hello, World!";printf("字符串内容:%s\n", str);return 0;
}

输出结果:

字符串内容:Hello, World!

2. 使用 puts() 函数

puts() 函数专门用于输出字符串,它会自动在输出后添加换行符:

/**
*  系统学习C语言 https://xiecoding.cn/c/
**/
#include <stdio.h>int main() {char str[] = "Hello, World!";puts(str);return 0;
}

输出结果:

Hello, World!

3. 逐字符输出

如果需要更精细的控制,可以使用循环逐个字符地输出:

/**
*  系统学习C语言 https://xiecoding.cn/c/
**/
#include <stdio.h>int main() {char str[] = "Hello, World!";int i = 0;while (str[i] != '\0') {putchar(str[i]);i++;}putchar('\n');return 0;
}

输出结果:

Hello, World! 

 

http://www.xdnf.cn/news/898831.html

相关文章:

  • Axios请求超时重发机制
  • 亚矩阵云手机实测体验:稳定流畅背后的技术逻辑​
  • 面向无人机海岸带生态系统监测的语义分割基准数据集
  • Cursor 1.0正式推出:全面解析你的AI 编程助手
  • 湖北理元理律师事务所:企业债务重组的风险控制方法论
  • 办公提效的AI免费工具使用感悟
  • 大量企业系统超龄服役!R²AIN SUITE 一体化企业提效解决方案重构零售数智化基因
  • Inxpect安全雷达传感器与控制器:动态检测 + 抗干扰技术重构工业安全防护体系
  • 从“人找政策”到“政策找人”:智能退税ERP数字化重构外贸生态
  • 如何以 9 种方式将照片从手机传输到笔记本电脑
  • 手机如何防止ip关联?3种低成本方案
  • 23套橙色系精选各行业PPT模版分享
  • 【前端】每日一道面试题6:解释Promise.any和Promise.allSettled的使用场景及区别。
  • 安装VUE客户端@vue/cli报错警告npm WARN deprecated解决方法 无法将“vue”项识别为 cmdlet、函数
  • 智能对联网页小程序的仓颉之旅
  • 2018~2025:英伟达在具身智能机器人领域的关键布局详解
  • 探索 Java 垃圾收集:对象存活判定、回收流程与内存策略
  • 学习笔记(26):线性代数-张量的降维求和,简单示例
  • Komiko 视频到视频功能炸裂上线!
  • uniapp 集成腾讯云 IM 消息搜索功能
  • python中的经典视觉模块:OpenCV(cv2)全面解析
  • 【PDF PicKiller】PDF批量删除固定位置图片工具,默认解密,可去一般图、背景图、水印图!
  • Excel处理控件Aspose.Cells教程:使用 C# 在 Excel 中创建组合图表
  • 消防一体化安全管控平台:构建消防“一张图”和APP统一管理
  • App/uni-app 离线本地存储方案有哪些?最推荐的是哪种方案?
  • 【nano与Vim】常用命令
  • Python----目标检测(YOLO简介)
  • AI生成的基于html+marked.js实现的Markdown转html工具,离线使用,可实时预览 [
  • NTT印地赛车:数字孪生技术重构赛事体验范式,驱动观众参与度革命
  • npm error Cannot read properties of null (reading ‘matches‘)