2010年6月23日 星期三

[C] strtok , strtok_r 和 strtok_s

我好像還沒有真正用過 strtok,一開始還有點慌,擔心東擔心西的,用了才知道還滿順的,順便筆記一下,另外,若是要在 vistual studio 系列上,可以把 strtok_r 直接 define 成 strtok_s 就可以,細節請參考 msdn


程式碼:


#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int main( int argc, char *argv[])
{
        char  *getTag, *tokenBrk, *data;
        char *tag[100];
        int cnt=0;

        data = NULL;

        if( argc > 1 )
                data = argv[1];
        else
                data = NULL;

        for ( getTag = strtok_r( data , ", " , &tokenBrk ) ; getTag ; getTag = strtok_r( NULL , ", " , &tokenBrk ) )
        {
                tag[cnt++] = getTag;
                //printf("[%s]\n" , getTag );
        }
        printf("[Src:%s]\n" , data );

        while( cnt-- > 0 )
                printf("[%s]\n" , tag[cnt] );

        return 0;
}


結果:


> ./a.out " 1 2 , 3,45 ,678 , 90 , ,"
[Src: 1]
[90]
[678]
[45]
[3]
[2]
[1]


原先一直很好奇為啥 getTag 取出來的字串有 '\0' 結尾,後來就把原字串印出來就知道了,因為那些 ',' 或 ' ' 都被取代掉囉!


沒有留言:

張貼留言