size_t strlen (conse char * str);
注意:
1.字串以 \0 作為結束標誌,strlen函式返回的是在字串中 \0 之前出現的字元個數(不包括\0)
2.函式的返回型別是size_t,是無符號的。
3.引數指向的字串必須以 \0 結束。
對於第二點,以**進行分析
int
main()
else
return0;
}
輸出結果是a。因為這個函式的返回型別是乙個無符號整數,而在表示式計算中如果包含了乙個或多個無符號整數的話那麼算出來的結果也是無符號整數。
模擬實現strlen
三種方法
1.使用count臨時變數
#include
#include
#include
size_t my_strlen
(const
char
* str)
return count;
}int
main()
這裡對str進行了解引用操作,如果指標是空指標,那程式會發生崩潰。所以在這裡要用斷言來對str是否為空指標進行判斷。
2.不使用臨時變數——遞迴
size_t my_strlen
(const
char
* str)
else
return0;
}int
main()
3.使用指標相減
指標-指標=中間元素的個數
size_t my_strlen
(const
char
* str)
return str - start;
}int
main()
char
*my_strcpy
(char
* destination,
const
char
* source)
;
1.源字元必須以\0結尾
2.拷貝的時候會把源字元的\0也拷過來
3.目標空間必須足夠大,能容納下源字串
模擬實現strcpy
char
*my_strcpy
(char
*dest,
const
char
* src)
*dest =
*src;
return ret;
}int
main()
**還可以進行簡化,最終簡化**如下↓
char
*my_strcpy
(char
*dest,
const
char
* src)
return ret;
}int
main()
(字串連線,字串追加)
char*(
char
*destination,
const
char
*source)
;
字串不能自己追加自己。
模擬實現strcat
char
*my_strcat
(char
* dest,
const
char
*src)
while
(*dest++
=*src++
)return ret;
}int
main()
輸出結果hello world
int
strcmp
(const
char
*str1,
const
char
*str2)
字串比較函式
標準規定:
第乙個字串大於第二個字串,則返回大於0的數字
第乙個字串小於第二個字串,則返回小於0的數字
兩個字串相等,則返回0.
那麼兩個字串是如何比較的呢?對兩個字串中相對應的字元的ascii碼值進行依次比較,如果兩個字串的第乙個字元ascii碼值相等,那就繼續比第二個大小。如果不相等,則就可以判斷兩個字串的大小。
模擬實現strcmp
int
my_strcmp
(char
* s1,
char
* s2)
*s1++
;*s2++;}
if(*s1 !=
*s2)
return
*s1 -
*s2;
}int
main()
輸出結果為-3,小於0,所以arr1char * strstr(const char *,const char *);
模擬實現strstr
char
*my_strstr
(const
char
* s1,
const
char
* s2)
cp++;if
(*s2 ==
'\0')}
return
null;}
intmain()
有了strcpy函式為什麼還要用memcpy呢?
strcpy遇到\0就會停下來,所以當遇到int arr=時(儲存方式是01 00 00 00 02 00 00 00,01後面00就會讓strcpy停下來)strcpy就不能將其拷貝。
void
*memcpy
(void
* destination,
const
void
* source,size_t num)
;
1.函式memcpy從source的位置開始向後複製num個位元組的資料到destnation的記憶體位置
2.這個函式遇到 『\0』 的時候不會停下來
3.如果source和destnation有任何的重疊,複製的結果都是未定義的
void
*my_memcpy
(void
* dest,
const
void
* src, size_t count)
return ret;
}int
main()
;int arr2[20]
=;my_memcpy
(arr2, arr1,
sizeof
(arr1));
return0;
}
1.與memcpy函式的區別就是memmove函式處理的源記憶體塊和目標記憶體是可以重疊的。
2.如果源空間和目標空間出現重疊,就得用memmove函式處理。
void
*memmove
(void
* destnation,
const
void
* source,size_t num)
;
memmove是分情況進行實現的(為了防止出現覆蓋情況)
當dest>src,destsrc+num:從前往後或者從後往前都可以
當destvoid
*my_memmove
(void
* dest,
const
void
* src, size_t num)
}else
}return ret;
}int
main()
;my_memmove
(arr1 +
2, arr1,16)
;return0;
}
模擬實現C語言庫函式
1.模擬實現strlen 方式1.計數器方式 intmy strlen const char str return count 方式2.不建立臨時變數計數器 遞迴 intmy strlen const char str 方式3.指標 指標的方式 intmy strlen char s 2.模擬實現s...
C語言模擬實現庫函式strstr
函式作用 判斷乙個字串是否為另乙個字串的子串,如果是,則返回第一次出現的首位址。比如strstr str,substr 就是判斷字串substr是否是str的子串。如果是,則該函式返回substr在str中首次出現的位址 否則,返回null 函式原型 在msdn中看一下strstr函式的原型 下邊是...
c語言 模擬實現c語言庫函式atoi
題目 模擬實現c語言庫函式atoi 思路 模擬實現庫函式atoi,要考慮幾種特殊情況,1.空格問題 2.符號問題 3.異常 字母 4.數字太大,越界問題。使用c語言編寫函式,將乙個數字字串轉換為對應的數字 功能類似於庫函式的atoi,考慮異常輸入 include include include in...