字符數(shù)組
char word[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’,‘!’};
字符串

char word[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’,‘!’,’ \0’};字符串變量
char *str = “Hello”; 
char word[] = “Hello”; 
char line[10] = “Hello”;“Hello”
″Hello″ 會被編譯器變成?個字符數(shù)組放在某處,這個數(shù)組的?度是6,結(jié)尾還有表?結(jié)束的0
兩個相鄰的字符串常量會被?動連接起來
?末的\表?下??還是這個字符串常量
C語?的字符串是以字符數(shù)組的形態(tài)存在的
唯?特殊的地?是字符串字?量可以?來初始化字符數(shù)組
以及標(biāo)準(zhǔn)庫提供了?系列字符串函數(shù)
char* s = "Hello, world!";字符串賦值?
char string[8]; 
scanf(“%s”, string); 
printf(“%s”, string);scanf讀??個單詞(到空格、tab或回?為?)
scanf是不安全的,因為不知道要讀?的內(nèi)容的?度
安全的輸?
char string[8];
scanf(“%7s”, string);
在%和s之間的數(shù)字表?最多允許讀?的字符的數(shù)量,這個數(shù)字應(yīng)該?數(shù)組的????
下?次scanf從哪?開始?
下一次scanf從上一個第八個開始
常?錯誤
這是?個空的字符串,buffer[0] == ‘\0’char buffer[] = “”;
這個數(shù)組的?度只有1!
? char **a 
? a是?個指針,指向另?個指針,那個指針指向?個字符(串) 
? char a[][] 
? a是?個?維數(shù)組,第?個維度的??不知道,不能編譯 
? char a[][10] 
? a是?個?維數(shù)組,a[x]是?個char[10] 
? char *a[] 
? a是?個?維數(shù)組,a[x]是?個char*程序參數(shù)
putchar
getchar
strlen
size_t strlen(const char * s);
返回s的字符串?度(不包括結(jié)尾的0)
char line[]="Hello"
printf("strlen=%lu\n",strlen(line));
printf("sizeof=%lu\n",sizeof(line));
輸出結(jié)果為:
strlen=5
sizeof=6
strcmp —compare
0:s1>s2
int mycmp(const char *s1,const char *s2)
{
	int idx = 0;
	while (s1[idx] == s2[idx] && s1[idx] != 0)
	{
		idx++;
	}return s1[idx] - s2[idx];
}
等同于
int mycmp(const char *s1,const char *s2)
{
	while (*s1==*s2&&*s1!='\0')
	{
		s1++; s2++;
	}
	return *s1 - *s2;
}strcpy —copy
char * strcpy(char *restrict dst, const char *restrict src);char *dst = (char*)malloc(strlen(src)+1);   //+1包括結(jié)尾最后的\0
strcpy(dst, src);用函數(shù)等價
數(shù)組版本
char* mycpy(char*dst,const char* src)
{
int idx = 0;
while(src[idx]){
dst[idx]=src[idx];
idx++;
}
dst[idx]='\0';
return dst;
}指針版本
char* mycpy(char*dst,const char* src)
{
char *ret=dst;
while( *dst++ = *src++ )
   ;
   *dst='\0';
   return ret;
}
strcat
char * strcat(char *restrict s1, const char *restrict s2);char?*mycat(char?cat1[],const?char?cat2[])?//聲明并實現(xiàn)我的貓字符指針函數(shù)。
{ ????int?i?=?0; ????
       int?j?=?strlen(cat1);?????????//貓1字符數(shù)組的最后一位下標(biāo)j ????while(i?!=?strlen(cat2)){???????????//當(dāng)貓2的下標(biāo)為最后一位\0時跳出循環(huán) ????????cat1[j]?=?cat2[i];???????   ??//貓1最后一位為貓二的第一位字符 ??????
       ??i++; ??????
       ??j++; ????
    } ????
    cat1[j]?=?'\0';???????????//貓1字符數(shù)組最后一位為0 ???
    ?return?cat1;????//讓我的貓字符指針指向貓1字符數(shù)組
}???????安全問題
strcpy和strcat都可能出現(xiàn)安全問題:如果那個dst或者要連接的地方?jīng)]有足夠的空間,不知道是否越界
安全版本
char * strncpy(char *restrict dst, const char *restrict src, size_t n);
char * strncat(char *restrict s1, const char *restrict s2, size_t n);
int strncmp(const char *s1, const char *s2, size_t n);在名字中間和參數(shù)表中多了一個n
n的意思是說你能拷過去多少個字符;多了的部分直接掐掉,不會越界。
對于cmp來說是比較前n個的大小
strchr
在參數(shù)?str?所指向的字符串中搜索第一次出現(xiàn)字符?c(一個無符號字符)的位置。
#include#includeint main ()
{
   const char str[] = "http://www.nowcoder.com";
   const char ch = '.';
   char *ret;
   ret = strchr(str, ch);
   printf("|%c| 之后的字符串是 - |%s|\n", ch, ret);
   return(0);
}
運行結(jié)果為
|.| 之后的字符串是 - |.nowcoder.com|  strrchr
在參數(shù)?str?所指向的字符串中搜索最后一次出現(xiàn)字符?c(一個無符號字符)的位置。
#include#includeint main ()
{
   int len;
   const char str[] = "https://www.nowcoder.com";
   const char ch = '.';
   char *ret;
   ret = strrchr(str, ch);
   printf("|%c| 之后的字符串是 - |%s|\n", ch, ret);
   return(0);
}
運行結(jié)果為
|.| 之后的字符串是 - |.com|  strstr()
在字符串?haystack?中查找第一次出現(xiàn)字符串?needle?的位置,不包含終止符 ‘\0’。
下面是 strstr() 函數(shù)的聲明。char*strstr(constchar*haystack,constchar*needle)
#include
#include
intmain()
{constcharhaystack[20] =?"NOWCODERABCD"; ???constcharneedle[10] =?“CODER”;char *ret;ret = strstr(haystack, needle);printf("子字符串是: %s\n", ret);return(0);}`
輸出結(jié)果為
子字符串是: CODERABCD
memcpy
和strcpy類似,只不過它是拷貝字節(jié)
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
                網(wǎng)站標(biāo)題:C語言字符串+字符串函數(shù)-創(chuàng)新互聯(lián)
                
                分享地址:http://www.chinadenli.net/article8/djceip.html
            
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、Google、企業(yè)建站、面包屑導(dǎo)航、網(wǎng)站建設(shè)、虛擬主機
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容