最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言字符函數(shù)與字符串函數(shù)詳解

 更新時間:2021年09月16日 15:59:59   作者:再吃一個橘子  
這篇文章主要給大家介紹了關(guān)于C語言字符/字符串的相關(guān)函數(shù),文中通過示例代碼總結(jié)的非常詳細(xì),對大家學(xué)習(xí)或者使用C語言具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

本章重點(diǎn)

重點(diǎn)介紹處理字符和字符串的庫函數(shù)的使用和注意事項(xiàng)

1.求字符串長度 strlen

2.長度不受限制的字符串函數(shù) strcpy ,strcat, strcmp

3.長度受限制的字符串函數(shù) strncpy,strncat ,strncmp

4.字符串查找 strstr,strtok

5.錯誤信息報告 strerror

6.字符操作

7.內(nèi)存操作函數(shù) memcpy,memmove,memset ,memcmp

前言

C語言中對字符和字符串的處理很是頻繁,但是C語言本身是沒有字符串類型的,字符串通常放在 常量字符串 中或者 字符數(shù)組 中。 字符串常量 適用于那些對它不做修改的字符串函數(shù)。

1.strlen函數(shù)

size_t strlen ( const char * str );

  • 字符串已經(jīng) '\0' 作為結(jié)束標(biāo)志,strlen函數(shù)返回的是在字符串中 '\0' 前面出現(xiàn)的字符個數(shù)(不包含 '\0' )。
  • 參數(shù)指向的字符串必須要以 '\0' 結(jié)束。
  • 注意函數(shù)的返回值為size_t,是無符號的( 易錯 )
  • 學(xué)會strlen函數(shù)的模擬實(shí)現(xiàn) (計數(shù)器、指針-指針、遞歸)

講解:

注意點(diǎn)1

有的編譯器可能用int來接收strlen函數(shù)的返回值會報錯,因?yàn)閟trlen函數(shù)返回值是size_t( unsigned int 無符號整型 )

	char arr[] = "abcdef";
	//錯誤示范
	int sz1 = strlen(arr);
	//正確示范
	size_t sz = strlen(arr);

注意點(diǎn)2

注意函數(shù)的返回值為size_t,是無符號的( 易錯 )

//3 - 8 < 0?
//strlen函數(shù)是size_t類型,是無符號的,必定大于0!??!
int main()
{
	if (strlen("abc") - strlen("abcdefgh") > 0)
	{
		printf("哈哈哈~~");
	}
	else
		printf("吼吼吼!");
	return 0;
}
//運(yùn)行結(jié)果是   哈哈哈~~

對比代碼:

int main()
{
	if ((int)strlen("abc") - (int)strlen("abcdefgh") > 0)
	{
		printf("哈哈哈~~");
	}
	else
		printf("吼吼吼!");
	return 0;
}
//運(yùn)行結(jié)果是   吼吼吼!

2.strcpy

char* strcpy(char * destination, const char * source );

  • 源字符串必須以 '\0' 結(jié)束。
  • 會將源字符串中的 '\0' 拷貝到目標(biāo)空間。
  • 目標(biāo)空間必須足夠大,以確保能存放源字符串。
  • 目標(biāo)空間必須可變。( 即:不能是不可修改的常量字符串 )
  • 學(xué)會模擬實(shí)現(xiàn)。

講解:

注意點(diǎn)1:

我們發(fā)現(xiàn),copy時,將源字符串毫無保留的( 包括末尾的 '\0' )一塊copy到目標(biāo)字符串中??!

注意點(diǎn)2:

如果源字符串中間本身就含有'\0',那么我們同樣還是取到遇見的第一個‘\0' ,不會繼續(xù)往后打印的?。。?/p>

注意點(diǎn)3:

目標(biāo)空間必須足夠大,以確保能存放源字符串。

	//錯誤示范
	//目標(biāo)字符串空間太少
	char arr1[] = "xxx";
	char arr2[] = "hello\0abc";
	strcpy(arr1, arr2);

注意點(diǎn)4:

目標(biāo)空間必須可變。

模擬strcpy函數(shù)

代碼1:

#include<stdio.h>
#include<assert.h>
void* my_strcpy(char* dest, const char* src)
{
	assert(dest && src);
	char* ret = dest;
	while (*src)
	{
		*dest = *src;
		dest++;
		src++;
	}
	*dest = '\0';
}
int main()
{
	char arr1[] = "xxxxxxxxxxxxxxxx";
	char arr2[] = "abc";
	my_strcpy(arr1, arr2);
	printf("%s", arr1);
	return 0;
}

代碼2:(升級版~~)

#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{
	assert(dest && src);
	char* ret = dest;
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}
int main()
{
	char arr1[] = "xxxxxxxxxxxxxxxx";
	char arr2[] = "abc";
	printf("%s", my_strcpy(arr1, arr2));
	return 0;
}

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • VisualStudio?2015?新建C/C++項(xiàng)目的圖文教程

    VisualStudio?2015?新建C/C++項(xiàng)目的圖文教程

    visual?studio是一個比較集成的開發(fā)平臺,本文主要介紹了VisualStudio?2015?新建C/C++項(xiàng)目的圖文教程,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Qt5.9實(shí)現(xiàn)簡單的多線程實(shí)例(類QThread)

    Qt5.9實(shí)現(xiàn)簡單的多線程實(shí)例(類QThread)

    Qt開啟多線程,主要用到類QThread。用一個類繼承QThread,然后重新改寫虛函數(shù)run()。具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • C++?命名空間?using聲明使用示例詳解

    C++?命名空間?using聲明使用示例詳解

    這篇文章主要為大家介紹了C++?命名空間?using聲明使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 詳解VSCode下C++環(huán)境配置過程

    詳解VSCode下C++環(huán)境配置過程

    這篇文章主要介紹了VSCode C++環(huán)境配置過程,在這大家需要在代碼的目錄下的.vscode文件夾下創(chuàng)建launch.json、tasks.json,具體實(shí)現(xiàn)過程跟隨小編一起看看吧
    2021-11-11
  • VSCode Linux的C++代碼格式化配置的實(shí)現(xiàn)

    VSCode Linux的C++代碼格式化配置的實(shí)現(xiàn)

    動格式化代碼容易出現(xiàn)錯誤,特別是當(dāng)代碼量較大時,使用自動格式化可以減少這種錯誤的風(fēng)險,本文主要介紹了VSCode Linux的C++代碼格式化配置的實(shí)現(xiàn),感興趣的可以了解一下
    2023-10-10
  • 適合初學(xué)者的C語言常量類型的講解

    適合初學(xué)者的C語言常量類型的講解

    常量是固定值,在程序執(zhí)行期間不會改變。這些固定的值,又叫做字面量。常量可以是任何的基本數(shù)據(jù)類型,比如整數(shù)常量、浮點(diǎn)常量、字符常量,或字符串字面值,也有枚舉常量。常量就像是常規(guī)的變量,只不過常量的值在定義后不能進(jìn)行修改
    2022-04-04
  • Qt采用線程以隊(duì)列方式實(shí)現(xiàn)下發(fā)數(shù)據(jù)

    Qt采用線程以隊(duì)列方式實(shí)現(xiàn)下發(fā)數(shù)據(jù)

    在C++中隊(duì)列是一種常用的數(shù)據(jù)結(jié)構(gòu)之一,一種特殊的線性表,一般采用先進(jìn)先出的方式。本文主要為大家介紹了Qt如何以隊(duì)列方式實(shí)現(xiàn)下發(fā)數(shù)據(jù),感興趣的可以了解一下
    2022-10-10
  • cocos2dx-3.10 C++實(shí)現(xiàn)滾動數(shù)字

    cocos2dx-3.10 C++實(shí)現(xiàn)滾動數(shù)字

    這篇文章主要為大家詳細(xì)介紹了cocos2dx-3.10 C++實(shí)現(xiàn)滾動數(shù)字效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C++的類型轉(zhuǎn)換(強(qiáng)轉(zhuǎn))你了解嗎

    C++的類型轉(zhuǎn)換(強(qiáng)轉(zhuǎn))你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++的類型轉(zhuǎn)換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 如何使用C語言實(shí)現(xiàn)平衡二叉樹數(shù)據(jù)結(jié)構(gòu)算法

    如何使用C語言實(shí)現(xiàn)平衡二叉樹數(shù)據(jù)結(jié)構(gòu)算法

    對于判斷是否為平衡二叉樹而言,我們需要知道以下特性:是一個二叉樹也是一個二叉排序樹該樹的每個結(jié)點(diǎn)上的(深度)左子樹 - 右子樹的值為平衡因子(BF(Balance Factor))該樹的每一個節(jié)點(diǎn)的左子樹和右子樹的高度至多等于1(平衡因子只可能是-1,0,1)
    2021-08-08

最新評論

乃东县| 和林格尔县| 和平县| 项城市| 板桥市| 沂南县| 余庆县| 镇原县| 辽源市| 景德镇市| 栾城县| 平阳县| 桂东县| 尼玛县| 莫力| 保德县| 高碑店市| 巴彦淖尔市| 钟祥市| 淮北市| 勃利县| 博客| 陵水| 和政县| 长治县| 古浪县| 三原县| 香格里拉县| 巴林左旗| 三都| 拉孜县| 色达县| 海门市| 金平| 东安县| 磐安县| 扶风县| 北碚区| 横峰县| 昭苏县| 望江县|