读书人

关于sprint()函数的实现原理,以及分析

发布时间: 2012-03-02 14:40:28 作者: rapoo

关于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;
}


读书人网 >C语言

热点推荐