|
CE printf不能用咋办啊??CE 提示建议使用StringCchVPrintfA函数??
[复制链接]
最近移植个库,库以前是在PC上编译的,都是用多字节的printf,在CE下报错,
情况如下:
error C2065: 'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' : undeclared identifier
然后我就按它的提示使用StringCchPrintfA;
定义了个宏:
#ifdef sprintf
#undef sprintf
#define sprintf(dst,format, othr) ce_sprintf(dst,format, othr)
#endif
函数定义如下:
int ce_sprintf (char *buf, const char *format, ...)
{
va_list argList;
va_start(argList, format);
StringCchPrintfA(buf, STRSAFE_MAX_CCH, format, argList);
va_end(argList);
}
但发现程序还是出错,到网上查了下变参的使用有问题;
后来我又改了下:
int ce_sprintf (char *buf, const char *format, ...)
{
va_list argList;
char c;
char szTemp[256];
char *p = (char *)va_start(argList, format);
do
{
c =*format;
if (c != '%')
{
//ce_sprintf(buf, "%c", c);
buf++;
format++;
}
else
{//按格式字符输出数据
switch(*++format)
{
case 'd':
case 'D':
StringCchVPrintfA(szTemp, STRSAFE_MAX_CCH, "%d", argList);
strcat(buf, szTemp);
buf += strlen(szTemp);
va_arg(argList, int);
format++;
break;
case 'X':
StringCchVPrintfA(szTemp, STRSAFE_MAX_CCH, "%x", argList);
strcat(buf, szTemp);
buf += strlen(szTemp);
va_arg(argList, int);
format++;
break;
case 'x':
StringCchVPrintfA(szTemp, STRSAFE_MAX_CCH, "%x", argList);
strcat(buf, szTemp);
buf += strlen(szTemp);
va_arg(argList, int);
format++;
break;
case 'f':
case 'F':
StringCchVPrintfA(szTemp, STRSAFE_MAX_CCH, "%f", argList);
strcat(buf, szTemp);
buf += strlen(szTemp);
va_arg(argList, int);
format++;
break;
case 'c':
StringCchVPrintfA(szTemp, STRSAFE_MAX_CCH, "%c", argList);
strcat(buf, szTemp);
buf += strlen(szTemp);
va_arg(argList, int);
format++;
break;
case 'C':
{
StringCchVPrintfA(szTemp, STRSAFE_MAX_CCH, "%C", argList);
strcat(buf, szTemp);
buf += strlen(szTemp);
p = (char *)va_arg(argList, int);
format++;
}
break;
case 's':
case 'S':
if (*(char **)argList == NULL)
{
return -1;
}
StringCchVPrintfA(szTemp, STRSAFE_MAX_CCH, "%s", argList);
strcat(buf, szTemp);
buf += strlen(szTemp);
va_arg(argList, int);
format++;
break;
default:
// ASSERT(FALSE);
break;
}
}
} while (*format != '\0');
va_end(argList);
return 0;
}
程序大致模仿printf发现还是不行,变参的内存分布是不很清楚。。
郁闷啊。。。
大家有啥好的替代函数和方法啊。。。
谢谢。。。
|
|