求字符串長(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)站回饋大家。長(zhǎng)度不受限制的字符串函數(shù)
size_t strlen ( const char * str );
模擬實(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ù)
strcpychar * strcpy ( char * destination, const char * source );
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));
}
strcmpint strcmp ( const char * str1, const char * str2 );
模擬實(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ù)
strncpychar * strncpy ( char * destination, const char * source, size_t num );
char * strncat ( char * destination, const char * source, size_t num );
int strncmp ( const char * str1, const char * str2, size_t num );
char * strstr ( const char * str1, const char * str2);
*模擬實(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 );
使用方式
錯(cuò)誤信息報(bào)告 strerror[把錯(cuò)誤碼轉(zhuǎn)為錯(cuò)誤信息]char * strerror ( int errnum );
配合c語(yǔ)言自帶的全局變量錯(cuò)誤碼使用可以報(bào)出當(dāng)前的錯(cuò)誤信息
perror[直接輸出錯(cuò)誤信息]變量引用的頭文件-------errno.h
變量名稱-------------------errno
字符操作void perror ( const char * str );?
perror("接入自定義信息");
頭文件:stdio.h
字符分類函數(shù)頭文件:#include
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 | 任何可打印字符,包括圖形字符和空白字符 |
int tolower ( int c );
int toupper ( int c );
使用情況
內(nèi)存操作函數(shù)內(nèi)存拷貝函數(shù)頭文件#include
或#include
*memcpy*拷貝的三種類型--決定從左往右拷貝還是從右往左拷貝
1.source與destination所指向的內(nèi)存完全不重疊
2.有重疊區(qū)域,并且destination小于source
3.有重疊區(qū)域,并且source大于destination
左往右拷貝還是從右往左拷貝取決于調(diào)整后紅框在前
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
*memmovevoid * 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");
}
memsetvoid * memset ( void * ptr, int value, size_t num );
使用情況
內(nèi)存比較函數(shù) memcmpint 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)查看詳情吧