strtok - 向前移动一个地方

时间:2017-12-07 20:35:54

标签: c string strtok

我有myPrint的功能,我正在尝试使用,但我认为我使用strtok功能错误

int myPrint( const  char* format , ...)
{
    char str[BUFFER];
    char cpy[BUFFER] = {0};
    char convert[BUFFER];
    char *check;
    char tempFormat[BUFFER];
    int len = 0;
    char *tempCheck;

    va_list args;
    va_start( args , format);   
    strcpy(tempFormat , format );

    check = strtok ( tempFormat , "%");

    int flag = 0;
    while( check != NULL)
    {
        strcat( cpy , check  );
        len = strlen( cpy );    

        switch(  tempFormat[len + 1]  )
        {
            case 'd':
                    sprintf( convert , "%d" , va_arg( args , int) );
                    strcat( cpy , convert);
                    break;
            case 'f':
                    sprintf( convert , "%f" , va_arg( args, double ));
                    strcat( cpy , convert);
                    break;
            case '%':
                    strcat( cpy ,"%" );
                    break;          
            case 's':
                    strcat( cpy ,va_arg( args , char* ) );
                    break;  
            default:
                break;              
        }
        check = strtok ( NULL  , "%");
    }

    printf("%s" , cpy);
    va_end( args);
}

void main()
{
    int x = 7;
    float y = 11;
    char str[] ="HELLo";
    char str2[]="MY NAME";

    myPrint ( "ss %d is %d %s  " , 7 , 6 , str);
}

问题是,如果我发送给函数打印我想要的内容,我会在% d之后得到strtok

有没有办法将@media (hover: hover) and (pointer: fine) { ... }调用一个地方的结果向前移动?

1 个答案:

答案 0 :(得分:0)

如果您希望将其移至最后一场比赛之外,则需要向strtok提供新指针。我尝试使用以下更改代码:

编辑: 我更新了整个代码,现在可能更容易看到了!

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


#define BUFFER 500
int myPrint( const  char* format , ...)
{
    char str[BUFFER];
    char cpy[BUFFER] = {0};
    char convert[BUFFER];
    char *check;
    char *last_check;
    char tempFormat[BUFFER];
    int len = 0;
    char *tempCheck;

    va_list args;
    va_start( args , format);   
    strcpy(tempFormat , format );

    check = strtok (tempFormat , "%");

    int flag = 0;
    while( check != NULL)
    {
        strcat( cpy , check  );
        len = strlen(cpy);    

        switch(  tempFormat[len + 1]  )
        {
            case 'd':
                    sprintf( convert , "%d" , va_arg( args , int) );
                    strcat( cpy , convert);
                    break;
            case 'f':
                    sprintf( convert , "%f" , va_arg( args, double ));
                    strcat( cpy , convert);
                    break;
            case '%':
                    strcat( cpy ,"%" );
                    break;          
            case 's':
                    strcat( cpy ,va_arg( args , char* ) );
                    break;  
            default:
                break;              
        }
        int len = strlen(check);
        last_check = check;
        check = strtok (check+len+2 , "%");
    }

    strcat( cpy , last_check);
    printf("%s" , cpy);
    va_end( args);
}

void main()
{
    int x = 7;
    float y = 11;
    char str[] ="HELLo";
    char str2[]="MY NAME";

    myPrint ("ss %d is %d %s  " , 7 , 6 , str);
}