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.pswp.cn/diannao/86007.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86007.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86007.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端下載文件,文件打不開的問題記錄

需求&#xff1a; 下載是很常見的接口&#xff0c;但是經常存在下載的文件異常的問題。此處記錄一個常見的錯誤。 分析&#xff1a; 1、接口請求需要配置{responseType: ‘blob’}&#xff0c;此時要求返回的格式為blob&#xff0c;進而進行下載。 const res await axios.…

HttpServletRequest常用方法

方法說明示例String getMethod()獲取請求的 HTTP 方法&#xff08;如 GET、POST 等&#xff09;。request.getMethod() 返回 "GET"String getRequestURI()獲取請求的 URI&#xff08;路徑部分&#xff0c;不包括域名和協議&#xff09;。請求 http://localhost:8080/…

day46python打卡

知識點回顧&#xff1a; 不同CNN層的特征圖&#xff1a;不同通道的特征圖什么是注意力&#xff1a;注意力家族&#xff0c;類似于動物園&#xff0c;都是不同的模塊&#xff0c;好不好試了才知道。通道注意力&#xff1a;模型的定義和插入的位置通道注意力后的特征圖和熱力圖 內…

杭州AI落地賺錢方案:30日行動計劃

本計劃基于《AI時代賺錢的第一性原理指南》&#xff0c;并針對杭州市的產業特色&#xff08;電商、直播、文旅&#xff09;進行深度定制。我們的目標不是空想&#xff0c;而是從明天開始就能一步步執行的藍圖。 方案一&#xff1a;電商/直播AI賦能工作室 這個方案完美結合了路…

MyBatis04:SpringBoot整合MyBatis——多表關聯|延遲加載|MyBatisX插件|SQL注解

目錄 一、多表關聯 1、數據庫表結構 2、javaBean類 3、mapper接口 4、sqlMapper文件 5、測試 二、延遲加載 1、解決什么問題 2、嵌套查詢 3、延遲加載 三、逆向工程MybatisX插件 1、下載插件 1. 通過 JetBrains 插件市場下載&#xff08;推薦&#xff09; 2. 手動…

PySpark、Plotly全球重大地震數據挖掘交互式分析及動態可視化研究

全文鏈接&#xff1a;https://tecdat.cn/?p42455 分析師&#xff1a;Yapeng Zhao 在數字化防災減災的時代背景下&#xff0c;地震數據的深度解析成為公共安全領域的關鍵議題。作為數據科學工作者&#xff0c;我們始終致力于通過技術整合提升災害數據的應用價值&#xff08;點擊…

【Veristand】Veristand環境安裝教程-Linux RT / Windows

首先聲明&#xff0c;此教程是針對Simulink編譯模型并導入Veristand中編寫的&#xff0c;同時需要注意的是老用戶編譯可能用的是Veristand Model Framework&#xff0c;那個是歷史版本&#xff0c;且NI不會再維護&#xff0c;新版本編譯支持為VeriStand Model Generation Suppo…

MVC與MVP設計模式對比詳解

MVC&#xff08;Model-View-Controller&#xff09;和MVP&#xff08;Model-View-Presenter&#xff09;是兩種廣泛使用的分層架構模式&#xff0c;核心目標是解耦業務邏輯、數據和界面&#xff0c;提升代碼可維護性和可測試性。以下是它們的對比詳解&#xff1a; MVC 模式&…

Node.js 項目調試指南

Node.js 項目調試指南 &#x1f9ed; 一、調試工具和方式總覽 方式難度場景說明console.log 調試★簡單問題定位最常見&#xff0c;但效率低debug 模塊★★模塊化輸出日志支持命名空間的調試日志VSCode 斷點調試★★★跟蹤函數調用、變量狀態推薦使用node inspect / ndb★★★…

Spring Boot 啟動流程及配置類解析原理

Spring Boot 是一個基于 Spring 框架的開源框架&#xff0c;旨在簡化 Spring 應用的配置和部署。通過提供約定優于配置的原則&#xff0c;Spring Boot 大大降低了 Java 企業級應用的開發復雜度。本文將詳細介紹 Spring Boot 的啟動流程及其配置類的解析原理&#xff0c;幫助開發…

Flask 核心概念速覽:路由、請求、響應與藍圖

一、路由參數與請求方法 Flask 路由允許定義多種參數類型,并通過 methods 屬性限制請求方法。 1. 路由參數類型: 除了默認的 string,Flask 還支持: int: 匹配整數,自動轉換為 Python int 類型。非數字輸入會返回 404。 float: 匹配浮點數,自動轉換為 Python float 類型…

Beckhoff(倍福)PLC 順控程序轉換條件解讀

一、請求機器人上件步 二、程序代碼解釋:1、程序代碼1&#xff1a; 1、程序代碼&#xff1a; fbVar_TonDelay2(IN : (bInPartPresentLeft AND bInPartPresentRight), PT : T#100MS);(* Go to the next step *) stVar_SEQ.bTOK : stVar_SEQ.bRELEASE AND(stGV_SYS_ELEMENTS.ar…

KITTI數據集(計算機視覺和自動駕駛領域)

KITTI&#xff08;Karlsruhe Institute of Technology and Toyota Technological Institute at Chicago&#xff09;數據集是計算機視覺和自動駕駛領域中最廣泛使用的基準數據集之一。它由德國卡爾斯魯厄理工學院和美國芝加哥豐田技術研究所聯合發布&#xff0c;旨在推動自動駕…

echarts在uniapp中使用安卓真機運行時無法顯示的問題

文章目錄 一、實現效果二、話不多說&#xff0c;上源碼 前言&#xff1a;我們在uniapp中開發的時候&#xff0c;開發的時候很正常&#xff0c;echarts的圖形在h5頁面上也是很正常的&#xff0c;但是當我們打包成安卓app或者使用安卓真機運行的時候&#xff0c;圖形根本就沒有渲…

C#使用MindFusion.Diagramming框架繪制流程圖(1):基礎類型

MindFusion.Diagramming框架 在C#中使用MindFusion.Diagramming.dll庫來創建圖表和圖形界面&#xff0c;可以讓你構建出豐富和交互式的圖形應用。MindFusion.Diagramming 是一個強大的庫&#xff0c;支持創建各種類型的圖表&#xff0c;例如流程圖、網絡圖、組織結構圖等。 M…

LangChain【6】之輸出解析器:結構化LLM響應的關鍵工具

文章目錄 一 LangChain輸出解析器概述1.1 什么是輸出解析器&#xff1f;1.2 主要功能與工作原理1.3 常用解析器類型 二 主要輸出解析器類型2.1 Pydantic/Json輸出解析器2.2 結構化輸出解析器2.3 列表解析器2.4 日期解析器2.5 Json輸出解析器2.6 xml輸出解析器 三 高級使用技巧3…

Spring Boot項目中JSON解析庫的深度解析與應用實踐

在現代Web開發中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作為輕量級的數據交換格式&#xff0c;已成為前后端通信的核心橋梁。Spring Boot作為Java生態中最流行的微服務框架&#xff0c;提供了對多種JSON庫的無縫集成支持。本文將深入探討Spring B…

OPenCV CUDA模塊光流------高效地執行光流估計的類BroxOpticalFlow

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::cuda::BroxOpticalFlow 是 OpenCV CUDA 模塊中實現Brox光流算法的類。該類用于在 GPU 上高效地計算兩幀圖像之間的稠密光流&#xff08;Dens…

視覺分析在人員行為屬性檢測中的應用

基于視覺分析的人員行為屬性檢測方案 一、背景與需求分析 在工業生產、建筑施工、公共安全等領域&#xff0c;人員行為屬性的合規性檢測是保障安全生產的關鍵環節。例如&#xff0c;工地工人未佩戴安全帽、廚房人員未佩戴手套、作業現場人員使用手機等行為&#xff0c;均可能…

Linux--進程的程序替換

問題導入&#xff1a; 前面我們知道了&#xff0c;fork之后&#xff0c;子進程會繼承父進程的代碼和“數據”&#xff08;寫實拷貝&#xff09;。 那么如果我們需要子進程完全去完成一個自己的程序怎么辦呢&#xff1f; 進程的程序替換來完成這個功能&#xff01; 1.替換原理…