首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于sprint()函数的实现原理,以及分析以下代码的有关问题

2012-03-02 
关于sprint()函数的实现原理,以及分析以下代码的问题谁可以帮我解释下该函数的实现原理,功能我很清楚,就不

关于sprint()函数的实现原理,以及分析以下代码的问题
谁可以帮我解释下该函数的实现原理,功能我很清楚,就不必要了.然后是以下代码有什么问题呢?谢谢

int   Stdout_dump(const   unsigned   char*   data,   int   len)
{
int   i;
char   buf[40960]   =   {0};

for   (i   =   0;   i   <   len;   ++i)   {
sprintf(buf,   "%s%02x ",   buf,   (int)data[i]);
if   ((i   %16)   ==   15)
sprintf(buf,   "%s\n ",   buf);
else  
sprintf(buf,   "%s   ",   buf);
}
if   ((i   %   16)   !=   0)
sprintf(buf,   "%s\n ",   buf);

doPrintf(buf,   strlen(buf));

return   len;
}


[解决办法]
int Stdout_dump(const unsigned char* data, int len)
{
int i;
char buf[40960] = {0};//栈上的数据太大,容易出问题

for (i = 0; i < len; ++i) {

sprintf(buf, "%s%02x ", buf, (int)data[i]);//buf这样使用会出现数据覆盖,下同
if ((i %16) == 15)
sprintf(buf, "%s\n ", buf);
else
sprintf(buf, "%s ", buf);
}
if ((i % 16) != 0)
sprintf(buf, "%s\n ", buf);

doPrintf(buf, strlen(buf));

return len;
}
[解决办法]
1. sprintf()的实现
http://fxr.watson.org/fxr/source/kern/subr_prf.c#L432

2.
int Stdout_dump(const unsigned char* data, int len)
{
int i;
char buf[40960] = {0};//栈上的数据太大, #用malloc吧!

for (i = 0; i < len; ++i) {

sprintf(buf, "%s%02x ", buf, (int)data[i]);//buf这样使用会出现数据覆盖,下同
// ## 不会覆盖只是效率太低
if ((i %16) == 15)
sprintf(buf, "%s\n ", buf);
else
sprintf(buf, "%s ", buf);
}
if ((i % 16) != 0)
sprintf(buf, "%s\n ", buf);

doPrintf(buf, strlen(buf));

return len;
}


热点排行