2011年2月25日 星期五

使用IAR的strchr函數注意事項

最近使用IAR的strchr要搜尋字串字,某個字元出現的位置,但是明明該字元有存在,卻是搜尋不到,後來用一個for loop去一個一個搜尋終於可以了。上網找了一下strchr的implention,發現有幾種版本:

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,搜尋出來的結果可能有錯。

沒有留言:

張貼留言