真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語(yǔ)言(進(jìn)階)學(xué)習(xí)筆記11-創(chuàng)新互聯(lián)

  • 求字符串長(zhǎng)度

    公司主營(yíng)業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)公司推出雙陽(yáng)免費(fèi)做網(wǎng)站回饋大家。
  1. strlen
  • 長(zhǎng)度不受限制的字符串函數(shù)

  1. strcpy
  2. strcat[重要][模擬實(shí)現(xiàn)]
  3. strcmp[重要][模擬實(shí)現(xiàn)]
  • 長(zhǎng)度受限制的字符串函數(shù)
  1. strncpy
  2. strncat
  3. strncmp
  • 字符串查找
  1. strstr[重要][模擬實(shí)現(xiàn)]
  2. strtok[陌生]
  • 錯(cuò)誤信息報(bào)告
  1. strerror[陌生]
  2. perror[陌生]
  • 字符操作
  • 內(nèi)存操作函數(shù)
  1. memcpy
  2. memmove[重要][模擬實(shí)現(xiàn)]
  3. memset
  4. memcmp
字符函數(shù)和字符串函數(shù) 求字符串長(zhǎng)度 strlen

size_t strlen ( const char * str );

  • 字符串已經(jīng)以'\0'作為結(jié)束標(biāo)志,strlen函數(shù)返回的是在字符串中'\0'前面出現(xiàn)的字符個(gè)數(shù)(不包含'\0' )。
  • 參數(shù)指向的字符串必須要以'\0'結(jié)束。
  • 函數(shù)的返回值為size_t,是無(wú)符號(hào)的(易錯(cuò))。

模擬實(shí)現(xiàn)

#include#include
size_t my_strlen(const char* str)
{
    assert(str != NULL);
	int count = 0;
	while (*str)
	{
		++count;
		++str;
	}
	return count;
}
void main()
{
	char str[] = "Hello World!";
	printf("%zd", my_strlen(str));
}
長(zhǎng)度不受限制的字符串函數(shù) strcpy

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

  • Copies the C string pointed by source into the array pointed by destination, including the terminating null character(and stopping at that point).
  • 源字符串必須以'\0'結(jié)束。
  • 會(huì)將源字符串中的'\0'拷貝到目標(biāo)空間。
  • 目標(biāo)空間必須足夠大,以確保能存放源字符串。
  • 目標(biāo)空間必須可變。
  • 返回值為目標(biāo)地址。
*strcat

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

  • Appends a copy of the source string to the destination string. The terminating null character in destination is overwritten by the first character of source, and a null character is included at the end of the new string formed by the concatenation of both in destination.

  • 檢測(cè)到源字符串的第一個(gè)'\0'就開始追加。[注意]

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

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

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

  • 字符串無(wú)法自己給自己追加。

  • 返回值為目標(biāo)地址。

模擬實(shí)現(xiàn)

#include#include
char* my_strcat(char* destination, const char* source)
{
    assert(destination && source);
	char* ret = destination;
	while (*destination)
		++destination;
	while (*destination++ = *source++);
//利用符號(hào)優(yōu)先級(jí),++高于=
	return ret;
//返回初始的目的地址
}
void main()
{
	char str1[20] = "Hello ";
	char str2[] = "World!";
	printf("%s\n", my_strcat(str1, str2));
}
strcmp

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

  • This function starts comparing the first character of each string. If they are equal to each other, it continues with the following pairs until the characters differ or until a terminating null-character is reached.
  • 標(biāo)準(zhǔn)規(guī)定∶
  1. 第一個(gè)字符串大于第二個(gè)字符串,則返回大于0的數(shù)字。
  2. 第一個(gè)字符串等于第二個(gè)字符串,則返回0。
  3. 第一個(gè)字符串小于第二個(gè)字符串,則返回小于0的數(shù)字。

模擬實(shí)現(xiàn)

int my_strcmp(const char* str1, const char* str2)
{
	int ret = 0;
	while ((ret = *(unsigned char*)str1 - *(unsigned char*)str2) == 0 && *str2)
	{
		str1++;
		str2++;
	}
	return ((-ret)< 0) - (ret< 0);
}
void main()
{
	printf("%d", my_strcmp("abcdef", "abcdh"));
}
長(zhǎng)度受限制的字符串函數(shù) strncpy

char * strncpy ( char * destination, const char * source, size_t num );

  • 若num超過(guò)源字符串的長(zhǎng)度,則剩下的部分會(huì)以'\0'來(lái)進(jìn)行替換。
strncat

char * strncat ( char * destination, const char * source, size_t num );

  • 若num超過(guò)源字符串的長(zhǎng)度,函數(shù)識(shí)別到源字符串末尾'\0'之后直接停止。
  • 若num小于源字符串的長(zhǎng)度,函數(shù)會(huì)在末尾添上'\0'而后停止。
strncmp

int strncmp ( const char * str1, const char * str2, size_t num );

  • n來(lái)指示所需要比較的位數(shù)。
字符串查找 *strstr[重要]

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

  • Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1.

*模擬實(shí)現(xiàn)[重要]

#define _CRT_SECURE_NO_WARNINGS 1
#includechar* my_strstr(const char* str1, const char* str2)
{
	const char* s1 = NULL;
	const char* s2 = NULL;
	char* cp = (char*)str1;
	if (!*str2)
		return (char*)str1;
	while (*cp)
	{
		s1 = cp;
		s2 = str2;
		while (*s1 && *s2 &&(*s1 == *s2))
			s1++,s2++;
		if (!*s2)
			return cp;
		cp++;
	}
	return NULL;
}
void main()
{
	char str1[] = "abcdefghijk";
	char str2[] = "ijk";
	char* ret = my_strstr(str1, str2);
	if (ret == NULL)
		printf("未找到!\n");
	else
		printf("找到了!\n%s\n", ret);
}
strtok[限制酶]

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

  • sep參數(shù)是個(gè)字符串,定義了用作分隔符的字符集合。
  • 第一個(gè)參數(shù)指定一個(gè)字符串,它包含了0個(gè)或者多個(gè)由sep字符串中一個(gè)或者多個(gè)分隔符分割的標(biāo)記。
  • strtok函數(shù)找到str中的下一個(gè)標(biāo)記,并將其用\0結(jié)尾,返回一個(gè)指向這個(gè)標(biāo)記的指針。(注:strtok函數(shù)會(huì)改變被操作的字符串,所以在使用strtok函數(shù)切分的字符串一般都是臨時(shí)拷貝的內(nèi)容并且可修改。
  • strtok函數(shù)的第一個(gè)參數(shù)不為NULL,函數(shù)將找到str中第一個(gè)標(biāo)記,strtok函數(shù)將保存它在字符串中的位置。
  • strtok函數(shù)的第一個(gè)參數(shù)為NULL,函數(shù)將在同一個(gè)字符串中被保存的位置開始,查找下一個(gè)標(biāo)記
  • 如果字符串中不存在更多的標(biāo)記,則返回NULL指針。

使用方式

錯(cuò)誤信息報(bào)告 strerror[把錯(cuò)誤碼轉(zhuǎn)為錯(cuò)誤信息]

char * strerror ( int errnum );

配合c語(yǔ)言自帶的全局變量錯(cuò)誤碼使用可以報(bào)出當(dāng)前的錯(cuò)誤信息

變量引用的頭文件-------errno.h

變量名稱-------------------errno

perror[直接輸出錯(cuò)誤信息]

void perror ( const char * str );?

perror("接入自定義信息");

頭文件:stdio.h

字符操作

頭文件:#include

字符分類函數(shù)

int 函數(shù)名 ( int c );

如果是滿足條件返回非0值,不滿足條件返回0。

函數(shù)如果它的參數(shù)符合下列條件就返回真
iscntrl任何控制字符
isspace空白字符:空格' '? 換頁(yè)'\f'? 換行'\n'? 回車'\r'? 制表符'\t'或者垂直制表符'\v'?
isdigit十進(jìn)制數(shù)字 0~9
isxdigit十六進(jìn)制數(shù)字,包括所有十進(jìn)制數(shù)字,小寫字母a~f,大寫字母A~F
islower小寫字母a~z
isupper大寫字母A~Z
isalpha字母a~z或A~Z
isalnum字母或者數(shù)字,a~z,A~Z,0~9
ispunct標(biāo)點(diǎn)符號(hào),任何不屬于數(shù)字或者字母的圖形字符(可打印)
isgraph任何圖形字符
isprint任何可打印字符,包括圖形字符和空白字符

字符轉(zhuǎn)換函數(shù)
  • tolower(轉(zhuǎn)小寫)
  • toupper(轉(zhuǎn)大寫)

int tolower ( int c );

int toupper ( int c );

使用情況

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

頭文件#include或#include

內(nèi)存拷貝函數(shù)

*拷貝的三種類型--決定從左往右拷貝還是從右往左拷貝

1.source與destination所指向的內(nèi)存完全不重疊

2.有重疊區(qū)域,并且destination小于source

3.有重疊區(qū)域,并且source大于destination

左往右拷貝還是從右往左拷貝取決于調(diào)整后紅框在前

*memcpy

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

以字節(jié)為單位拷貝

返回destination的指針

(memcpy函數(shù)應(yīng)該拷貝不重疊的內(nèi)存 拷貝重疊內(nèi)存可能出現(xiàn)問(wèn)題)

(vs中既可以拷貝不重疊,也可以拷貝重疊內(nèi)存,盡量以標(biāo)準(zhǔn)實(shí)現(xiàn))

模擬實(shí)現(xiàn)

#includevoid* my_memcpy(void* destination, const void* source, size_t num)
{
	void* ret = destination;
	while (num--)
	{
		*(char*)destination = *(char*)source;
        destination = (char* )destination +1;
        source = (char* )source +1;
//標(biāo)準(zhǔn)的寫法,使用++會(huì)在部分編譯器內(nèi)報(bào)錯(cuò)
	}
	return ret;
}
void main()
{
	int arr1[10] = {1,2,3,4,5,6,7,8,9,10};
	int arr2[20] = {0};
	my_memcpy(arr2, arr1, 20);
	for (int i = 0; i< sizeof(arr2) / sizeof(arr2[0]); ++i)
	{
		printf("%d ", arr2[i]);
	}
	printf("\n");
}

注:(char*)為暫時(shí)性的強(qiáng)制類型轉(zhuǎn)換與*和++配合使用容易出錯(cuò),不同編譯器下括號(hào)使用不同,采用+1來(lái)進(jìn)行更為標(biāo)準(zhǔn)。

vscode

vs2022

*memmove

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

以字節(jié)為單位拷貝

返回destination的指針

(memmove函數(shù)可以拷貝不重疊的內(nèi)存)(與memcpy功能類似)

模擬實(shí)現(xiàn)

#define _CRT_SECURE_NO_WARNINGS 1
#include#includevoid* my_memmove(void* dest, void* src, size_t num)
{
	if (dest >src)
		for (int i = num - 1; i >= 0; --i)
			((char*)dest)[i] = ((char*)src)[i];
	else
		for (int i = 0; i< num; ++i)
			((char*)dest)[i] = ((char*)src)[i];
	return dest;
}
void main()
{
	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
	//my_memmove(arr1 + 2, arr1, 20);
	my_memmove(arr1, arr1 + 2, 20);
	for (int i = 0; i< sizeof(arr1) / sizeof(arr1[0]); ++i)
	{
		printf("%d ", arr1[i]);
	}
	printf("\n");
}
memset

void * memset ( void * ptr, int value, size_t num );

  • 以字節(jié)為單位設(shè)置內(nèi)存。
  • value該值以int類型傳遞,但該函數(shù)使用此值的無(wú)符號(hào)char類型轉(zhuǎn)換填充內(nèi)存塊。

使用情況

內(nèi)存比較函數(shù) memcmp

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

<0兩個(gè)內(nèi)存塊中不匹配的第一個(gè)字節(jié)在 ptr1 中的值低于 ptr2中的值(如果計(jì)算以無(wú)符號(hào)字符值)
0兩個(gè)內(nèi)存塊的內(nèi)容相等
>0兩個(gè)內(nèi)存塊中不匹配的第一個(gè)字節(jié)在 ptr2中的值大于在 ptr2中的值(如果計(jì)算以無(wú)符號(hào)字符值)

使用情況

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


分享文章:c語(yǔ)言(進(jìn)階)學(xué)習(xí)筆記11-創(chuàng)新互聯(lián)
新聞來(lái)源:http://weahome.cn/article/digiij.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部