0

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

バッファのサイズは、その値を保持するのに十分です。

前もって感謝します

4

1 に答える 1

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) を使用していますか?

于 2013-02-05T12:20:40.237 に答える