網(wǎng)站首頁 編程語言 正文
一、字符串的概念
字符串是有序字符的集合
字符串是程序中的基本元素之一
C 語言中沒有字符串的概念
- C 語言中通過特殊的字符數(shù)組模擬字符串
- C 語言中的字符串是以 ‘\0’ 結尾的字符數(shù)組
二、字符數(shù)組與字符串
在C語言中,雙引號引用的單個或多個字符是—種特殊的字面量
- 存儲于程序的全局只讀存諸區(qū)
- 本質為字符數(shù)組,編譯器自動在結尾加上 ‘\0' 字符
下面看一段字符數(shù)組與字符串的代碼:
#include <stdio.h>
int main()
{
char ca[] = {'H', 'e', 'l', 'l', 'o'};
char sa[] = {'W', 'o', 'r', 'l', 'd', '\0'};
char ss[] = "Hello world!";
char* str = "Hello world!";
printf("%s\n", ca);
printf("%s\n", sa);
printf("%s\n", ss);
printf("%s\n", str);
return 0;
}
輸出結果如下:
因為 ca[ ] 是字符數(shù)組而不是字符串,%s 這個格式化字符表示所需要打印的就是字符串,所以打印 ca 自然就會不對。
三、字符串字面量的秘密
- 字符串字面量的本質是一個數(shù)組
- 字符串字面量可以看作常量指針
- 字符串字面量中的字符不可改變
- 字符串字面量至少包含一個字符
"Hello World !”是一個無名的字符數(shù)組
下面看一個字符串字面量的代碼:
#include <stdio.h>
int main()
{
char b = "abc"[0];
char c = *("123" + 1);
char t = *"";
printf("%c\n", b);
printf("%c\n", c);
printf("%d\n", t);
printf("%s\n", "Hello");
printf("%p\n", "World");
return 0;
}
輸出結果如下:
注意char t = *" "; 里面包含了一個 '\0'
四、字符串的長度
- 字符串的長度就是字符串所包含字符的個數(shù)
- 字符串長度指的是第一個 ‘\0’ 字符前出現(xiàn)的字符個數(shù)
- 通過 '\0' 結束符來確定字符串的長度
- 函數(shù) strlen 用于返回字符串的長度
下面看一段 strlen 的使用:
#include <stdio.h>
#include <string.h>
int main()
{
char s[] = "Hello\0world";
int i = 0;
for(i=0; i<sizeof(s)/sizeof(char); i++)
{
printf("%c\n", s[i]);
}
printf("%s\n", s);
printf( "%d\n", strlen(s) );
printf( "%d\n", strlen("123") );
return 0;
}
輸出結果如下:
s 代表字符串的話代表的就是 Hello,s 如果代表字符數(shù)組的話代表的就是 Hello\0world\0
五、小結
- C 語言中通過字符數(shù)組模擬字符串
- C 語言中的字符串使用 ‘\0’ 作為結束符
- 字符串字面量的本質為字符數(shù)組
- 字符串相關函數(shù)都依賴于結束符 ‘\0'
原文鏈接:https://blog.csdn.net/weixin_43129713/article/details/123718889
相關推薦
- 2022-06-07 C語言非遞歸算法解決快速排序與歸并排序產生的棧溢出_C 語言
- 2022-12-27 詳解PyQt5?事件處理機制_python
- 2022-09-21 python中模塊導入模式詳解_python
- 2022-06-12 C語言詳解float類型在內存中的存儲方式_C 語言
- 2023-01-23 重啟后nvidia-smi命令不可執(zhí)行出現(xiàn)“Make?sure?that?the?latest?NV
- 2022-09-02 selenium動態(tài)數(shù)據(jù)獲取的方法實現(xiàn)_python
- 2022-03-13 C語言之直接插入排序算法的方法_C 語言
- 2022-03-21 C#中使用CliWrap讓命令行交互舉重若輕_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支