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

C語言超詳細(xì)講解字符串函數(shù)和內(nèi)存函數(shù)

 更新時間:2022年05月12日 10:34:25   作者:Iceevov  
這篇文章主要介紹一些c語言中常用字符串函數(shù)和內(nèi)存函數(shù)的使用,字符串函數(shù)(String?processing?function)也叫字符串處理函數(shù),指的是編程語言中用來進(jìn)行字符串處理的函數(shù)

字符串函數(shù)

長度不受限制的字符串函數(shù)

strlen

size_t strlen ( const char * str )

求字符串長度:

字符串以'\0' 作為結(jié)束標(biāo)志,strlen函數(shù)返回的是在字符串中 '\0' 前面出現(xiàn)的字符個數(shù)(不包含 '\0' )

參數(shù)指向的字符串必須要以 '\0' 結(jié)束

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

例子如下:計算Hello World! 的字符數(shù)

strcpy

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

用法:將 source 指向的 C 字符串復(fù)制到 destination 指向的數(shù)組中,包括終止空字符(并在該點(diǎn)停止)

注意:

源字符串必須以 '\0' 結(jié)束。

會將源字符串中的 '\0' 拷貝到目標(biāo)空間。

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

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

strcpy的實(shí)現(xiàn):

char * strcpy(char *dest, const char*src)
{ 
 char *ret = dest;//記錄下字符串dest的起始地址
 assert(dest != NULL);
 assert(src != NULL);
 while((*dest++ = *src++))//copy
 {
  ;
 }
 return ret;//返回起始地址
}

strcat

char * strcat ( char * destination, const char * source )

用法:將源字符串的副本附加到目標(biāo)字符串。也就是將src字符串接在dest的字符串后面,并且src字符串的第一個字符覆蓋dest的最后一個字符(\0),并且在接好的字符串后加上'\0'

注意:

源字符串必須以 '\0' 結(jié)束。

目標(biāo)空間必須有足夠的大,能容納下源字符串的內(nèi)容。

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

strcat的實(shí)現(xiàn):

char * strcat(char *dest, const char*src)
{
 char *ret = dest;
 assert(dest != NULL);
 assert(src != NULL);
//找到目標(biāo)空間
 while(*dest)
 {
  dest++;
 }
//拷貝
 while((*dest++ = *src++))
 {
  ;
 }
 return ret;
}

strcmp

int strcmp ( const char * str1, const char * str2 )

用法:此函數(shù)開始比較每個字符串的第一個字符。如果它們等于每個其他,它會繼續(xù)以下對,直到字符不同或終止達(dá)到空字符。

注意:

第一個字符串大于第二個字符串,則返回大于0的數(shù)字

第一個字符串等于第二個字符串,則返回0

第一個字符串小于第二個字符串,則返回小于0的數(shù)字

strcmp的實(shí)現(xiàn):

?int strcmp(const char* st1, const char* st2)
{
	int ret = 0;
	while (*st1 == *st2)
	{
		st1++;
		st2++;
		if(*st1 == *st2 && *st1 == '\0')
			return ret;//相等的時候返回0
	}
	return *st1 - *st2;

長度受限制的字符串函數(shù)介紹

strncpy

拷貝num個字符從源字符串到目標(biāo)空間。

如果源字符串的長度小于num,則拷貝完源字符串之后,在目標(biāo)的后邊追加0,直到num個。

strncat

將源的前 num 個字符附加到目標(biāo),加上一個終止空字符。

如果 source 中 C 字符串的長度小于 num,則只有到終止符的內(nèi)容空字符被復(fù)制

strncmp

比較到出現(xiàn)另個字符不一樣或者一個字符串結(jié)束或者num個字符全部比較完。

字符串查找以及錯誤報告

strstr

char * strstr ( const char *str1, const char * str2)

返回指向 str1 中第一次出現(xiàn) str2 的指針,如果 str2 不屬于字符串str1就返回空指針

strstr的實(shí)現(xiàn):

char* strstr(const char* st1, const char* st2)
{
	//st1,st2標(biāo)注起始位置
	char* s1 = st1;
	char* s2 = st2;
	char* cur = s1;
	while (*cur)
	{
		s1 = cur;
		while (*s1 == *s2 && *s1 && *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return cur;
		}
		cur++;
	}
	return NULL;//找不到
}

strtok

用法:根據(jù)給出的字符將字符串分隔開

char * strtok ( char * str, const char * sep )

sep參數(shù)是個字符串,定義了用作分隔符的字符集合

第一個參數(shù)指定一個字符串,它包含了0個或者多個由sep字符串中一個或者多個分隔符分割的標(biāo)

記strtok函數(shù)找到str中的下一個標(biāo)記,并將其用 \0 結(jié)尾,返回一個指向這個標(biāo)記的指針。(注:

strtok函數(shù)會改變被操作的字符串,所以在使用strtok函數(shù)切分的字符串一般都是臨時拷貝的內(nèi)容

并且可修改。)

strtok函數(shù)的第一個參數(shù)不為 NULL ,函數(shù)將找到str中第一個標(biāo)記,strtok函數(shù)將保存它在字符串

中的位置。

strtok函數(shù)的第一個參數(shù)為 NULL ,函數(shù)將在同一個字符串中被保存的位置開始,查找下一個標(biāo)

記。

如果字符串中不存在更多的標(biāo)記,則返回 NULL 指針

這里演示一下:

strerror

char * strerror ( int errnum )

返回錯誤碼,所對應(yīng)的錯誤信息

這里頭文件為#include<errno.h>

演示如下;

內(nèi)存操作函數(shù)

memcpy

void * memcpy ( void * destination, const void * source, size_t num )

用法:函數(shù)memcpy從source的位置開始向后復(fù)制num個字節(jié)的數(shù)據(jù)到destination的內(nèi)存位置。

這個函數(shù)在遇到 '\0' 的時候并不會停下來。

如果source和destination有任何的重疊,復(fù)制的結(jié)果都是未定義的。

memcpy的實(shí)現(xiàn):

?void* memcpy(void* dest, const void* src, size_t sz)
{
	assert(dest && src);
	void* ret = dest;
	int count = sz;
	while (count--)
	{
		*(char*)dest = *(char*)src;//拷貝
		dest = (char*)dest + 1;
		src = (char*)src + 1;
	}
	return ret;
}

memmove

void * memmove ( void * destination, const void * source, size_t num )

用法:和memcpy的用法差不多,和memcpy的差別就是memmove函數(shù)處理的源內(nèi)存塊和目標(biāo)內(nèi)存塊是可以重疊的。

如果源空間和目標(biāo)空間出現(xiàn)重疊,就得使用memmove函數(shù)處理

memmove的實(shí)現(xiàn):

void* memmove(void* dest, const void* src, size_t sz)
{
	assert(dest && src);//斷言
	int* ret = dest;
	int count = sz;
	if (*(char*)dest > *(char*)src && *(char*)dest < *(char*)src + count)
	{
		//后->前
		while (count--)
		{
			*((char*)dest + count) = *(char*)src + count;
		}
	}
	else
	{
		//前->后
		while (count--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	return ret;
}

memcmp

int memcmp ( const void * ptr1,const void * ptr2,size_t num )

用法:比較從ptr1和ptr2指針開始的num個字節(jié)

返回值:

到此這篇關(guān)于C語言超詳細(xì)講解字符串函數(shù)和內(nèi)存函數(shù)的文章就介紹到這了,更多相關(guān)C語言字符串函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言利用EasyX實(shí)現(xiàn)繪制足球圖案

    C語言利用EasyX實(shí)現(xiàn)繪制足球圖案

    這篇文章主要為大家詳細(xì)介紹了C語言如何利用EasyX繪圖庫實(shí)現(xiàn)繪制一個簡單的足球圖案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-11-11
  • php調(diào)用c++的方法

    php調(diào)用c++的方法

    這篇文章主要介紹了php調(diào)用c++的方法,需要的朋友可以參考下
    2014-01-01
  • 純c語言實(shí)現(xiàn)面向?qū)ο蠓治雠c示例分享

    純c語言實(shí)現(xiàn)面向?qū)ο蠓治雠c示例分享

    采用C語言實(shí)現(xiàn)的關(guān)鍵是如何運(yùn)用C語言本身的特性來實(shí)現(xiàn)多態(tài)、繼承面、封裝的面向?qū)ο蟮奶卣?最近給出了例子,大家可以參考使用
    2014-01-01
  • Windows下Qt讀取系統(tǒng)的內(nèi)存、CPU、GPU等使用信息的示例代碼

    Windows下Qt讀取系統(tǒng)的內(nèi)存、CPU、GPU等使用信息的示例代碼

    在當(dāng)今計算機(jī)應(yīng)用廣泛的領(lǐng)域中,了解系統(tǒng)的內(nèi)存、CPU和GPU使用情況是非常重要的,本文將介紹如何使用Qt和Windows API來讀取系統(tǒng)的內(nèi)存、CPU和GPU使用詳細(xì)信息,將提供一個完整的示例代碼,需要的朋友可以參考下
    2024-01-01
  • C++之友元:友元函數(shù)和友元類詳解

    C++之友元:友元函數(shù)和友元類詳解

    友元是一種允許非類成員函數(shù)訪問類的非公有成員的一種機(jī)制??梢园岩粋€函數(shù)指定為類的友元,也可以把整個類指定為另一個類的友元
    2013-09-09
  • C++排序算法之插入排序

    C++排序算法之插入排序

    這篇文章主要為大家詳細(xì)介紹了C++排序算法之插入排序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 對比分析C語言中的gcvt()和ecvt()以及fcvt()函數(shù)

    對比分析C語言中的gcvt()和ecvt()以及fcvt()函數(shù)

    這篇文章主要介紹了對比分析C語言中的gcvt和ecvt以及fcvt函數(shù),都是將數(shù)字轉(zhuǎn)化為字符串,注意其之間的功能區(qū)別,需要的朋友可以參考下
    2015-08-08
  • C++ 網(wǎng)絡(luò)連通性檢測的實(shí)現(xiàn)方法

    C++ 網(wǎng)絡(luò)連通性檢測的實(shí)現(xiàn)方法

    這篇文章主要介紹了C++ 網(wǎng)絡(luò)連通性檢測的實(shí)現(xiàn)方法的相關(guān)資料,這里提供實(shí)例幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-09-09
  • C語言中常見的幾種流程控制語句

    C語言中常見的幾種流程控制語句

    這篇文章主要給大家介紹了關(guān)于C語言中常見的幾種流程控制語句,分別包括goto語句、if語句、switch語句、while循環(huán)、do...while循環(huán)、for循環(huán)以及break和continue等,需要的朋友可以參考下
    2021-08-08
  • C++ 實(shí)現(xiàn)稀疏矩陣的壓縮存儲的實(shí)例

    C++ 實(shí)現(xiàn)稀疏矩陣的壓縮存儲的實(shí)例

    這篇文章主要介紹了C++ 實(shí)現(xiàn)稀疏矩陣的壓縮存儲的實(shí)例的相關(guān)資料,M*N的矩陣,矩陣中有效值的個數(shù)遠(yuǎn)小于無效值的個數(shù),且這些數(shù)據(jù)的分布沒有規(guī)律,需要的朋友可以參考下
    2017-07-07

最新評論

蒙阴县| 天峻县| 石台县| 江源县| 革吉县| 进贤县| 夹江县| 淮滨县| 赤峰市| 光泽县| 满洲里市| 洞口县| 华宁县| 修武县| 仙游县| 肇东市| 宜黄县| 平罗县| 永寿县| 金川县| 海安县| 宁强县| 仙游县| 攀枝花市| 拉萨市| 永济市| 元谋县| 淄博市| 凤阳县| 泸定县| 临邑县| 凤翔县| 平陆县| 佛冈县| 突泉县| 宜春市| 山阴县| 法库县| 繁峙县| 新郑市| 九江市|