淺談C語(yǔ)言中strcpy,strcmp,strlen,strcat函數(shù)原型
實(shí)例如下:
//strcat(dest,src)把src所指字符串添加到dest結(jié)尾處(覆蓋dest結(jié)尾處的'\0')并添加'\0'
char *strcat(char * strDest, const char *strSrc)
{
char *res=strDest;
assert((strDest!=NULL)&&(strSrc!=NULL));
while(*strDest)strDest++;
while(*strDest=*strSrc)
{
strDest++;
strSrc++;
}
return res;
}
//strcpy(dest,src)把從src地址開(kāi)始且含有null結(jié)束符的字符串復(fù)制到以dest開(kāi)始的地址空間
char *strcpy(char *strDest, const char *strSrc)
{
char *res=strDest;
assert((strDest!=NULL)&&(strSrc!=NULL));
while((*strDest=*strSrc)!='\0')
{
strDest++;
strSrc++;
}
return res;
}
今天去文思創(chuàng)新面試,考官問(wèn)了我一個(gè)簡(jiǎn)單的實(shí)現(xiàn),即:自己編寫strcpm的實(shí)現(xiàn),IBM曾經(jīng)也考過(guò)寫strcpy原型,這幾個(gè)函數(shù)在面試的時(shí)候經(jīng)常被考到,很具有代表性,突然被問(wèn)起還真有點(diǎn)措手不及呢。現(xiàn)在記下供大家學(xué)習(xí)和以后溫習(xí):(下面的程序經(jīng)本人通過(guò))
1、Strcat函數(shù)原型如下:
char *strcat(char *strDest, const char *strScr) //將源字符串加const,表明其為輸入?yún)?shù)
{
char * address = strDest; //該語(yǔ)句若放在assert之后,編譯出錯(cuò)
assert((strDest != NULL) && (strScr != NULL)); //對(duì)源地址和目的地址加非0斷言
while(*strDest) //是while(*strDest!='/0')的簡(jiǎn)化形式
{ //若使用while(*strDest++),則會(huì)出錯(cuò),因?yàn)?+是不受循環(huán)
strDest++; //約束的。所以要在循環(huán)體內(nèi)++;因?yàn)橐?strDest最后指
} //向該字符串的結(jié)束標(biāo)志'/0'。
while(*strDest++ = *strScr++)
{
NULL; //該循環(huán)條件內(nèi)可以用++,
} //此處可以加語(yǔ)句*strDest='/0';有無(wú)必要?
return address; //為了實(shí)現(xiàn)鏈?zhǔn)讲僮?,將目的地址返?
}
以下是在VC6.0中調(diào)試的例子,函數(shù)名用strcata代替。
#include <stdio.h>
#include <assert.h>
char *strcata(char *strDest,const char *strScr)
{
char * address = strDest;
assert((strDest != NULL) && (strScr != NULL));
while(*strDest)
{
strDest++;
}
while(*strDest++ = *strScr++)
{
NULL;
}
return address;
}
void main()
{
char str1[100]={"i love"};
char str2[50]={"China"};
printf("%s/n",strcata(str1,str2));
}
2、Strcpy函數(shù)原型如下:
char *strcpy(char *strDest, const char *strScr)
{
char *address=strDest;
assert((strDest != NULL) && (strScr != NULL));
while(*strScr) //是while(*strScr != '/0')的簡(jiǎn)化形式;
{
*strDest++ = *strScr++;
}
*strDest = '/0'; //當(dāng)strScr字符串長(zhǎng)度小于原strDest字符串長(zhǎng)度
return address; //時(shí),如果沒(méi)有改語(yǔ)句,就會(huì)出錯(cuò)了。
}
以下是在VC6.0中調(diào)試的例子,函數(shù)名用strcpya代替。
#include <stdio.h>
#include <assert.h>
char *strcpya(char *strDest, const char *strScr)
{
char *address = strDest;
assert((strDest != NULL) && (strScr != NULL));
while(*strScr)
{
*strDest++ = *strScr++;
}
*strDest = '/0';
return address;
}
void main()
{
char str1[100]={"i love"};
char str2[50]={"China"};
printf("%s/n",strcpya(str1,str2));
}
3、Strcmp函數(shù)原型如下:
int strcmp (const char *str1,const char *str2)
{
int len = 0;
assert((str1 != '/0') && (str2 != '/0'));
while(*str1 && *str2 && (*str1 == *str2))
{
str1++;
str2++;
}
return *str1-*str2;
}
以下是在VC6.0中調(diào)試的例子,函數(shù)名用strcmpa代替。
#include <stdio.h>
#include <assert.h>
int strcmpa (const char *str1,const char *str2)
{
int len = 0;
assert((str1 != '/0') && (str2 != '/0'));
while(*str1 && *str2 && (*str1==*str2))
{
str1++;
str2++;
}
return *str1-*str2;
}
void main()
{
char str1[100] = {"i love"};
char str2[50] = {"China "};
printf("%d/n",strcmpa(str1,str2));
}
4、Strlen函數(shù)原型如下:
int strlen(const char *str)
{
int len = 0;
assert(str != NULL);
while(*str++)
{
len++;
}
return len;
}
以下是在VC6.0中調(diào)試的例子,函數(shù)名用strlena代替。
#include <stdio.h>
#include <assert.h>
int strlena(const char *str)
{
int len = 0;
assert(str != NULL);
while(*str++)
{
len++;
}
return len;
}
void main()
{
char str1[100] = {"i love"};
char str2[50] = {"China "};
printf("%d/n",strlena(str1));
}
以上這篇淺談C語(yǔ)言中strcpy,strcmp,strlen,strcat函數(shù)原型就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用C語(yǔ)言編寫一個(gè)強(qiáng)制關(guān)機(jī)程序
這篇文章主要為大家詳細(xì)介紹了如何使用C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的"流氓軟件",一個(gè)可以強(qiáng)制關(guān)機(jī)惡作劇關(guān)機(jī)程序,輸入指定指令才可以解除,感興趣的小伙伴可以學(xué)習(xí)一下2023-11-11
C++實(shí)現(xiàn)俄羅斯方塊(linux版本)
這篇文章主要為大家詳細(xì)介紹了linux版本C++實(shí)現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
基于Qt實(shí)現(xiàn)的自定義樹(shù)結(jié)構(gòu)容器
在Qt框架中,盡管其提供了許多強(qiáng)大的容器類,但缺少一個(gè)通用的、靈活的樹(shù)結(jié)構(gòu)容器,所以本文將設(shè)計(jì)并實(shí)現(xiàn)一個(gè)可復(fù)用的自定義樹(shù)結(jié)構(gòu)容器,需要的可以參考下2024-12-12
C++深入探索類和對(duì)象之封裝及class與struct的區(qū)別
C++?類與對(duì)象涉及的知識(shí)點(diǎn)非常廣泛,所以我準(zhǔn)備寫成幾個(gè)特定的部分來(lái)作為博文分享,這次的blog將詳細(xì)講解類的屬性、行為、訪問(wèn)權(quán)限,class與struct的區(qū)別以及具體案例,希望能夠?qū)δ銈冇袔椭?,解決入門小白或者對(duì)這方面了解不多的朋友們,那么接下來(lái)開(kāi)始今天的內(nèi)容2022-05-05
C++實(shí)現(xiàn)數(shù)字轉(zhuǎn)換為十六進(jìn)制字符串的方法
這篇文章主要介紹了C++實(shí)現(xiàn)數(shù)字轉(zhuǎn)換為十六進(jìn)制字符串的方法,涉及C++操作數(shù)字與字符串轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下2015-06-06
VC++進(jìn)度條process Bar的用法實(shí)例
這篇文章主要介紹了VC++進(jìn)度條process Bar的用法,是進(jìn)行VC++應(yīng)用程序開(kāi)發(fā)中非常常見(jiàn)的實(shí)用技巧,需要的朋友可以參考下2014-10-10

