sprintf没有为变量stats-> info.transferID提供正确的值,但是 printf为该变量提供了适当的值,所有其他值都是正确的
char buff[200];
sprintf(buff,"Index:1:%u:%u:%d\n",
stats->connection.peer,
stats->connection.local,
stats->info.transferID);
printf(" %s",buff);
printf(" %d\n",stats->info.transferID);
info是Transfer_Info类型的结构。
typedef struct Transfer_Info {
void *reserved_delay;
int transferID;
----
----
}
我得到的输出:
Index:1:2005729282:3623921856:0
3
缓冲区的大小足以保持其值,
提前致谢
答案 0 :(得分:1)
适合我:
#include <stdio.h>
struct connection
{
unsigned peer, local;
};
struct info
{
int transferID;
};
struct stats
{
struct connection connection;
struct info info;
};
int main(void)
{
char buff[100];
struct stats s = { { 1, 2 }, { 3 } };
struct stats* stats = &s;
sprintf(buff,"Index:1:%u:%u:%d\n",
stats->connection.peer,
stats->connection.local,
stats->info.transferID);
printf(" %s",buff);
printf(" %d\n",stats->info.transferID);
return 0;
}
输出(ideone):
Index:1:1:2:3
3
你确定缓冲区够大吗?您确定使用的是正确的类型说明符(%u
和%d
)吗?