//char *buf  的內容會被改變 !!!!!!!!!!!

void testf1(char* buf,char* ptr[])
{
    int in=0 ;
    char *token ;
    char *rest = buf ;
    while((token=strtok_r(rest,"|",&rest))!=NULL) {
        ptr[in] = token ;
        in++ ;
    } //while
}

void *thread1(void *param)
{
    pthread_detach(pthread_self());
    char* ptr[128]={0} ;
    char data[INFO_MAX_SZ]={0} ;
    while( 1 ){
        strcpy(data,"111|222|33333|44|5|6666666|7|8|9999999999999|0|") ;
        testf1(data,ptr) ;
        assert( strcmp(ptr[0],"111")==0 ) ;
        assert( strcmp(ptr[1],"222")==0 ) ;
        assert( strcmp(ptr[2],"33333")==0 ) ;
        assert( strcmp(ptr[3],"44")==0 ) ;
        assert( strcmp(ptr[4],"5")==0 ) ;
        assert( strcmp(ptr[5],"6666666")==0 ) ;
        assert( strcmp(ptr[6],"7")==0 ) ;
        assert( strcmp(ptr[7],"8")==0 ) ;
        assert( strcmp(ptr[8],"9999999999999")==0 ) ;
        assert( strcmp(ptr[9],"0")==0 ) ;
        printf("(%p)(%p)(%p)(%p)(%p)(%p)\n",ptr[0],ptr[1],ptr[2],ptr[3],ptr[4],ptr[5]) ;
        break ;
    }//while
    return 0 ;
}

void *thread2(void *param)
{
    pthread_detach(pthread_self());
    char* ptr[128]={0} ;
    char data[INFO_MAX_SZ]={0} ;
    while( 1 ){
        strcpy(data,"aaa|bbb|ccccc|dd|e|fffffff|g|h|iiiiiiiiiiiii|k|") ;
        testf1(data,ptr) ;
        assert( strcmp(ptr[0],"aaa")==0 ) ;
        assert( strcmp(ptr[1],"bbb")==0 ) ;
        assert( strcmp(ptr[2],"ccccc")==0 ) ;
        assert( strcmp(ptr[3],"dd")==0 ) ;
        assert( strcmp(ptr[4],"e")==0 ) ;
        assert( strcmp(ptr[5],"fffffff")==0 ) ;
        assert( strcmp(ptr[6],"g")==0 ) ;
        assert( strcmp(ptr[7],"h")==0 ) ;
        assert( strcmp(ptr[8],"iiiiiiiiiiiii")==0 ) ;
        assert( strcmp(ptr[9],"k")==0 ) ;
        printf("(%p)(%p)(%p)(%p)(%p)(%p)\n",ptr[0],ptr[1],ptr[2],ptr[3],ptr[4],ptr[5]) ;
        break ;
    }//while
    return 0 ;
}

int main()
{
    pthread_t tid1 ;
    pthread_create(&tid1 , NULL, thread1, (void*)(long)3);
    pthread_create(&tid1 , NULL, thread2, (void*)(long)6);
    while( 1 ){
        sleep( 10 ) ;
    }
    return 0;
}

g++ --std=c++11 -Wall -Werror test1.cpp -pthread -O1 -o test1.exe

 

arrow
arrow
    全站熱搜

    hedgezzz 發表在 痞客邦 留言(0) 人氣()