所以我正在努力創建在c中連接字串的原始函式。提供給我的一種解決方案是:
char *_strcat(char *dest, char *src)
{
int c, c2;
c = 0;
while (dest[c])
c ;
for (c2 = 0; src[c2] ; c2 )
dest[c ] = src[c2];
return (dest);
}
讓我感到困惑的部分是while (dest[c]),以及其他類似的部分。我已經通過各種資源瀏覽了指標,但我似乎無法理解這部分。一個很好的解釋將不勝感激。
uj5u.com熱心網友回復:
對于初學者來說,這個功能是不正確的。它不會構建連接字串,因為它不會將終止零字符附加到此 for 回圈中'\0'的結果 ( ) 字串dest
for (c2 = 0; src[c2] ; c2 )
dest[c ] = src[c2];
該函式也應宣告為
char * _strcat( char *dest, const char *src );
因為附加的字串 ( src) 沒有改變。
這個while回圈
while (dest[c])
c ;
相當于
while (dest[c] != '\0' )
c ;
而這個for回圈
for (c2 = 0; src[c2] ; c2 )
dest[c ] = src[c2];
相當于
for (c2 = 0; src[c2] != '\0' ; c2 )
dest[c ] = src[c2];
那就是回圈繼續它們的迭代,直到在字串中的while回圈中遇到終止零字符'\ 0' dest(以找到它的結尾)和在字串中的第二個回圈中src找到它的結尾..
非零標量運算式在條件中被評估為邏輯真。
并且變數c和c2應該具有無符號型別size_t而不是型別,int因為該型別的物件int可能不夠大以存盤字串長度。
此外,您不應定義從下劃線字符開始的名稱。
至于你的問題
指標值遞增究竟是如何作業的?
那么指標本身不會增加。使用帶有下標運算子的運算式來訪問字串的元素,例如dest[c]ordest[c ]或src[c2]。
該函式可以通過以下方式定義
char * my_strcat( char *dest, const char *src )
{
char *p = dest;
while ( *p != '\0' ) p;
while ( ( *p = *src ) != '\0' );
return dest;
}
在顯示的函式中確實有遞增的指標p,src并且沒有使用帶有下標運算子的運算式。
uj5u.com熱心網友回復:
char *dest是指向 char 的指標,默認指向第一個字符。然后下面的回圈會將指標偏移量移動到字串的末尾。
c = 0;
while (dest[c])
c ;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/524598.html
