- 相關(guān)推薦
筆試題總結(jié)
首先看一下strcpy這個函數(shù):
原型聲明:extern char *strcpy(char *dest,char *src);
頭文件:string.h
功能:把src所指由NULL結(jié)束的字符串復(fù)制到dest所指的數(shù)組中。
說明:src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來容納src的字符串。
返回指向dest的指針。
* C語言標(biāo)準(zhǔn)庫函數(shù)strcpy的一種典型的工業(yè)級的最簡實現(xiàn)
* 返回值:
* 返回目標(biāo)串的地址。
* 對于出現(xiàn)異常的情況ANSI-C99標(biāo)準(zhǔn)并未定義,故由實現(xiàn)者決定返回值,通常為NULL。
* 參數(shù):
* strDeatination
* 目標(biāo)串
* strSource
* 源串
***********************/
char *strcpy(char *strDestination, const char *strSource);
{
assert(strDestination && strSource);
char *cp=strDestination;
while(*cp++ = *strSource++);
return strDestination;
}
實戰(zhàn)一下,下面幾個test用于找錯:
void test1()
{
char string[10];
char* str1=\"0123456789\";
strcpy(string, str1);
}
答:表面上并且編譯都不會錯誤。但如果string數(shù)組原意表示的是字符串的話,那這個賦值就沒有達到意圖。最好定義為char string[11],這樣最后一個元素可以存儲字符串結(jié)尾符\\\0\;
void test2()
{
char string[10], str1[10];
for(int I=0; I<10;I++)
{
str1[I] =\a\;
}
strcpy(string, str1);
}
答:strcpy使用錯誤,strcpy只有遇到字符串末尾的\\\0\才會結(jié)束,而str1并沒有結(jié)尾標(biāo)志,導(dǎo)致strcpy函數(shù)越界訪問,不妨讓str1[9]=\\\0\,這樣就正常了。
void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}
答:這又會出現(xiàn)第一道改錯題的錯誤了。strlen(str1)算出來的值是不包含結(jié)尾符\\\0\的,如果str1剛好為10個字符+1結(jié)尾符,string就得不到結(jié)尾符了?蓪trlen(str1)<=10改為strlen(str1)<10。
【筆試題總結(jié)】相關(guān)文章:
大班筆的教案12-22
筆的世界教學(xué)反思02-19
《各種各樣的筆》教案03-08
各種各樣的筆教案03-27
數(shù)字筆試題04-06
C 筆試題04-06
筆試題(循環(huán))04-06
筆的世界教學(xué)反思8篇02-26
國網(wǎng)筆試題04-06
職場禮儀試題及答案03-28