網站首頁 編程語言 正文
常用的字符串處理函數(標準庫里面的)
strlen : 用來求一個字符串的長度
?? ??? ??? ??? ??? ? ?#include <string.h>
?? ??? ??? ??? ??? ? size_t strlen(const char *s);
?? ??? ??? ??? ?@s : 指向要計算的那個字符串的首地址?
?? ??? ??? ??? ??? ?“const char *” : 表示在函數調用過程中,防止對s指向的空間里面內容進行修改。
?? ??? ??? ??? ??? ?“size_t”: size_t => unsigned int ?
?? ??? ??? ??? ??? ??? ??? ? ?typede unsigned int size_t ?;?
返回值: 返回字符串s第一個\0前面的字符的個數。
atoi:將十進制的數字字符串,轉成整數值
#include <stdlib.h>
int atoi(const char *nptr);
long atol(const char *nptr);
long long atoll(const char *nptr);
strcpy/strncpy :字符串拷貝函數 將一個字符串拷貝到另外一個字符串上面去。
?? ??? ??? ??? ? #include <string.h>
?? ??? ??? ??? ?strcpy :用來把src指向的字符串,拷貝到dest指向的空間中去,直到遇到\0才會結束。
?? ??? ??? ? ? char *strcpy(char *dest, const char *src);
?? ??? ??? ??? ?@dest : ?destination 目的地 ,必須是一個可寫的空間
?? ??? ??? ??? ?@src : source 源,從哪里 ?
?? ??? ??? ??? ?返回值: 返回拷貝后目的地字符串的首地址?
strncpy : 正是為了解決strcpy的這個bug的(strcpy沒有考慮到dest指向的空間的大小問題)
?? ??? ??? ??? ??? ?#include <string.h>
?? ??? ??? ??? ??? ? char *strncpy(char *dest, const char *src, size_t n);
?? ??? ??? ??? ??? ?strncpy: 把src指向的字符串前面頂多n個字符拷貝到dest指向的內存空間中去。
?? ??? ??? ??? ??? ??? ?它到底拷貝了多少個字符呢??
?? ??? ??? ??? ??? ??? ??? ?<= n??? ??? ??? ??? ??? ??? ?(1) 遇到\0拷貝結束,此時\0也會被拷貝。
?? ??? ??? ??? ??? ??? ??? ?char s[10];?
?? ??? ??? ??? ??? ??? ??? ?strncpy(s, "12345", 10);?? ?
?? ??? ??? ??? ??? ??? ?(2) 已經拷貝了n個字符,此時后面的字符就不會被拷貝。?
?? ??? ??? ??? ??? ??? ??? ?char s[10];?
?? ??? ??? ??? ??? ??? ??? ?strncpy(s, "0123456789", 10);?
strcmp / strncmp :一個一個字符進行比較它們對應的ASCII碼
?? ??? ??? ??? ?if c1 > c2?
?? ??? ??? ??? ??? ?返回1?
?? ??? ??? ??? ?if c1 < c2?
?? ??? ??? ??? ??? ?返回-1?
?? ??? ??? ??? ?if c1 == c2?
?? ??? ??? ??? ??? ?則繼續比較下一個字符,如果全部相等則返回0?
#include <string.h>
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
strcat / strncat 字符串連接函數
?? ??? ??? ? #include <string.h>
?? ??? ??? ?strcat : 用來把src指向的字符串拷貝到dest指向的字符串的末尾(尾部連接)
?? ??? ??? ? char *strcat(char *dest, const char *src);
?? ??? ??? ?@dest : 指向目標字符串(一段可寫的空間)?
?? ??? ??? ??? ?@src : 指向原始字符串?
?? ??? ??? ??? ?返回值: ?
?? ??? ??? ??? ??? ?返回連接后的字符串的首地址(dest指向的首字符地址)
?? ??? ? char *strncat(char *dest, const char *src, size_t n);
?? ??? ??? ?strncat : 把src指向的字符串拷貝到dest末尾,但是它頂多拷貝了n個字符。
?? ??? ??? ??? ?(1) 遇到\0拷貝結束,此時\0也會被拷貝。?
?? ??? ??? ??? ?(2) 即使沒有遇到\0,但是已經拷貝了n個字符啦。?
sizeof 求字節運算符
sizeof(x) : 用來求一個對象或類型所占字節數的運算符,x可以是一個對象(變量、指針、數組、==),也可以是一個類型。
先求x的類型,然后再求該類型所占的字節數
=> typeof(x)
=> sizeof( typeof(x) )
sizeof(指針類型) == 機器字長
32bits的機器 指針所占字節數為4
64bits的機器 指針所占字節數為8
求數組的大小
int a[100];
sieof(a[0]) == 4
sizeof(a[1024]) == 4
sizeof(a) ==
typeof(a) => int[100]
sizeof(int[100]) => 4 * 100
char * p[4]; //指針數組
sizeof(p[0]) == 8
sizeof(p) ==
typeof(p) => char* [4]
sizeof(char *) * 4 == 8 * 4
char (*p)[4];//數組指針
sizeof(p) == 8
int (*p)(int ,int); //函數指針
sizeof(p) == 8
動態內存分配函數
malloc : 用來動態分配一個size大小的內存空間,并且把分配到內存空間的首地址返回。
malloc分配的空間的生存期,是隨進程持續性。
malloc分配的空間一旦分配給你,他就不會自動去釋放,一定需要你調用free或你的這個進行消亡了!
?? ??? ?#include <stdlib.h>
?? ??? ?void *malloc(size_t size);
?? ??? ??? ??? ?@size : 要分配的空間的大小(以字節為單位)
?? ??? ??? ??? ?返回值: ?
?? ??? ??? ??? ??? ?成功返回分配的空間的首地址
?? ??? ??? ??? ??? ?失敗返回NULL.?
?? ??? ?char * p = (char *)malloc(100);?
free : 用來釋放ptr指向的內存空間的
ptr指向的內存空間,必須是malloc/realloc/calloc這三個函數分配的內存空間。
?? ??? ??? ??? ?void free(void *ptr);
?? ??? ??? ??? ?@ptr : 指向咱們需要釋放的那一塊內存的首地址
?? ??? ??? ??? ??? ?一般為malloc/realloc/calloc這三個函數的
?? ??? ??? ??? ??? ?返回值。?
calloc : 它的作用類似于 malloc ,不過它是數組分配函數, 它分配一個數組空間,它帶有兩個參數。
?? ??? ??? ? void *calloc(size_t nmemb, size_t size);
?? ??? ??? ??? ?@nmemb : ?表示分配多少元素?
?? ??? ??? ??? ?@size : ?表示每一個元素占多少字節
?? ??? ??? ??? ?返回值:?
?? ??? ??? ??? ??? ?成功返回分配的空間的首地址。
?? ??? ??? ??? ??? ?失敗返回NULL。
int * a = calloc(10, sizeof(int));
realloc : 用來把ptr(必須是malloc/realloc/calloc這三個函數分配的內存空間)指向的動態內存,擴展到size大小。
?? ??? ??? ??? ?void *realloc(void *ptr, size_t size);
?? ??? ??? ??? ?@ptr : 指向咱們需要擴展的那一塊內存的首地址。
?? ??? ??? ??? ??? ?一般為malloc/realloc/calloc這三個函數的返回值。
?? ??? ??? ??? ?@size : 擴展到size大小
?? ??? ??? ??? ?返回值:?
?? ??? ??? ??? ??? ?成功返回分配的空間的首地址
?? ??? ??? ??? ??? ?失敗返回NULL。?? ??? ??? ??? ?1. size > 原來的大小?
?? ??? ??? ??? ??? ?realloc用來把ptr指向的內存,擴展到size字節,
?? ??? ??? ??? ??? ?原來前面的內存保持不變,后面新增內存內容不會
?? ??? ??? ??? ??? ?被初始化。
?? ??? ??? ??? ??? ?(1) 原址擴建
?? ??? ??? ??? ??? ?(2) 整體搬遷?
?? ??? ??? ??? ??? ?2. size == ?0?
?? ??? ??? ??? ??? ? realloc(ptr, 0) <=> free(ptr)
main的參數問題
在linux下面,程序運行的時候,可以帶參數,只不過所有的參數都當作是字符串來處理的。
//argc :保存你給main傳參的個數
//argv : 用來保存傳遞給main的所有參數的
//int main(int argc, char * argv[])
int main(int argc, char ** argv)
{
}
原文鏈接:https://blog.csdn.net/weixin_46836491/article/details/125702768
相關推薦
- 2022-05-13 UnicodeEncodeError: ‘utf-8‘ codec can‘t encode cha
- 2023-02-01 docker中安裝elasticsarch?等鏡像的過程_docker
- 2022-05-21 k8s入門集群組件介紹及概念理解_服務器其它
- 2023-07-18 SpringBoot中線程池初始化,并且可配置線程池參數
- 2023-11-21 NVIDIA jetson nano/ Linux/ Ubuntu18.0.4 配置固定IP靜態IP
- 2021-12-14 Qt?QMessageBox類使用教程_C 語言
- 2022-04-06 Go語言實現枚舉的示例代碼_Golang
- 2022-03-27 基于PyQt5制作Excel數據分組匯總器_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支