為什麼strcpy要有返回值?
返回strdest的原始值使函式能夠支援鏈式表示式,增加了函式的「附加值」。同樣功能的函式,如果能合理地提高的可用性,自然就更加理想。
鏈式表示式的形式如:
int ilength=strlen(strcpy(stra,strb));
又如:char * stra=strcpy(new char[10],strb);
返回strsrc的原始值是錯誤的。其一,源字串肯定是已知的,返回它沒有意義。其二,不能支援形如第二例的表示式。其三,為了保護源字串,形參用const限定strsrc所指的內容,把const char *作為char *返回,型別不符,編譯報錯。
strcpy的原型為extern char* strcpy(char *dest,const char *src);它包含在標頭檔案string.h中,它的返回值指向dest的指標,其功能是把src所指由null結束的字串複製到dest所指的陣列中。值得注意的是,src和dest所指記憶體區域不可以重疊,且dest必須有足夠的空間來容納src的字串,src字串尾的字串結束標誌'\0'也會被複製過去。
char* strcpy(char *strdes, char *strsrc)
字串拷貝函式需要考慮到以下幾點:
原字串與目標字串記憶體重疊
對原字串和目標字串進行null檢查
儲存目標字串strdes基址
賦值過程中遞增以及判空
char* strncpy(char *strdes, char *strsrc, size_t n)
注意:memcpy memmove區別和實現
memcpy與memmove的目的都是將n個位元組的源記憶體位址的內容拷貝到目標記憶體位址中。
但當源記憶體和目標記憶體存在重疊時,memcpy會出現錯誤,而memmove能正確地實施拷貝,但這也增加了一點點開銷。
memmove的處理措施:
(1)當源記憶體的首位址等於目標記憶體的首位址時,不進行任何拷貝
(2)當源記憶體的首位址大於目標記憶體的首位址時,實行正向拷貝
(3)當源記憶體的首位址小於目標記憶體的首位址時,實行反向拷貝
memcpy是c語言中的記憶體複製函式,它的函式原型為void *memcpy(void *dest,const void *src,size_t n).它的目的是將src指向位址為起始位址的連續n個位元組的資料複製到以dest指向位址為起始位址的空間內,函式返回指向dest的指標。需要注意的是,src和dest所指記憶體區域不能重疊,同時,與strcpy相比,memcpy遇到'\0'不結束,而是一定要複製完n個位元組。而且如果目標陣列dest本身已有資料,執行memcpy()之後,將覆蓋原有資料(最多覆蓋n)。如果要追加資料,則每次執行memcpy後,要將目標陣列位址增加到要追加資料的位址。
memmove()函式用來做記憶體複製,可以拿他來複製任何資料型別的物件,可以指定複製的資料長度。
void *memmove(void *dest,void *src,size_t count)
else
4 實現字串轉換為整型(atoi)
注意:a 空格 b 正負號 c 是否為數字 d 是否會溢位
int atoi(stringstr)
else
if(str[i]=='+'
) i++;
long
long res=0
;
while(str[i]!='
\0'&&isdigit(str[i]))
return flag*res;
}
5 實現itoa
注意:a 正負號 b 結尾新增'\0'
char *itoa(intnum)
while(num>0
)
if(sign<0
)
temp[i]='\0'
; i--;
while(i>=0
)
str[j]='\0'
;
return
str;
}
6 不使用任何變數,如何實現計算字串長度的函式strlen()
使用變數時,strlen的實現
int strlen(const char *str)
不使用變數,實現:
int strlen(const char *s)
7 strchr實現
char *strchr(constchar *str,int
c)
8 strcmp實現
int strcmp(constchar *s,const
char *t)
return (*s-*t);
}
9 strcat實現
char *strcat(char *strdes,constchar *strsrc)
更多參考:
php 字串函式彙總
1 查詢字元位置函式 strpos str,search,int 查詢search在 str中的第一次位置從int開始 stripos str,search,int 函式返回字串在另乙個字串中第一次出現的位置。該函式對大小寫不敏感 strrpos str,search,int 查詢search在 s...
字串彙總
字串的暴力,挺無腦的,沒什麼想說的。inline void init inline int query int l,int r 第一次是橫著hash,用的是p1,此時的 h 表示的是第 i 行長度為 j 的字首串的hash值。第二次是豎著hash,用的是p2,此時的 h 發生了更新,此時的 h 變成...
PHP部分字串函式彙總
strpos str,search,int 查詢search在 str中的第一次位置從int開始 stripos str,search,int 函式返回字串在另乙個字串中第一次出現的位置 strrpos str,search,int 查詢search在 str中的最後一次出現的位置從int subm...