我有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) { ... }
调用一个地方的结果向前移动?
答案 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);
}