standard C:
char *strchr(const char *s, int c) { while (*s != (char)c) if (!*s++) return 0; return (char *)s; }
public-domain:
char *(strchr)(const char *s, int c) { /* Scan s for the character. When this loop is finished, s will either point to the end of the string or the character we were looking for. */ while (*s != '\0' && *s != (char)c) s++; return ( (*s == c) ? (char *) s : NULL ); }
我想IAR應該是使用public-domain的,所以一旦s裡面有\0,就立即跳出來了!
因此使用strchr、strrchr這一類函數時,要留意傳入的資料中,是否含有0x00,也就是null。如果傳入的資料含有0x00,搜尋出來的結果可能有錯。