standard c library 裡面的strchr函式的宣告是:
char * strchr(const char *s, int c);
光看這個宣告就會覺得有問題,接收的引數是const char*, 返回的是非const的,也就是說:
const char* str = ...
char* ptr = strchr(str, 'c');
假設str裡面有字元c,那接下來就可以通過ptr修改str的內容了:
*ptr = 'd';
把字元c變成了d,繞過了編譯器的檢查。
上面這個程式用gcc 3.4.6編譯沒有任何警告和報錯,但是執行的時候bus error導致crash了。
據說c++過載了兩個strchr函式:
const char* strchr(const char* s, int c)
char* strchr(char* s, int c)
根據不同的傳入引數返回不同型別的指標,避免了此問題。但是在c語言裡,這個函式是有問題的。
sprintf 函式和strchr 函式
可以用sprintf 函式把資訊輸出到字串,用法和printf fprintf類似,但應保證字串足夠大。strchr 函式 查詢字串s中首次出現字元c的位置,成功則返回要查詢字元第一次出現的位置,失敗返回null include include include include include inc...
C語言strchr函式
strchr函式原型 extern char strchr const char s,char c 查詢 字串s中首次出現字元c的位置。char strchr const char str,int val char strchr char str,int ch 標頭檔案 include 功能 查詢 ...
C語言strchr 函式
char strchr const char str,int c 在引數str所指向的字串中搜尋第一次出現字元c 乙個無符號字元 的位置。下面是 strchr 函式的宣告。char strchr const char str,int c 該函式返回在字串 str 中第一次出現字元 c 的位置,如果未...