strchr 函式的問題

2021-05-01 16:53:16 字數 536 閱讀 4024

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 的位置,如果未...