繁体   English   中英

在 C 中打印同一个 Struct 变量的不同值

[英]Printing different values for the same Struct variable in C

#define MAX_HEIGHT 512
#define MAX_WIDTH 512

typedef struct
{
  int lines;
  int cols;
  int highestValue;
  int matrix[MAX_WIDTH][MAX_HEIGHT];
} Pgm;

void getInfo()
{
  Pgm pgm;
  FILE *f = fopen("pepper.pgm", "r");
  bool keepReading = true;
  int line = 0, countSpaces = 0, i = 0;
  do
  {
    fgets(buffer, MAX_LINE, f);
    if (feof(f))
    {
      printf("\nCheguei no final do arquivo");
      keepReading = false;
      break;
    }
    if (line >= 3)
    {
      char *values = strtok(buffer, " ");
      while (values != NULL)
      {
        total++;
        // printf("values: %d, cols: %d, pgm.matrix[%d][%d], total: %d\n", atoi(values), pgm.cols, i, countSpaces, total);
        pgm.matrix[i][countSpaces] = atoi(values);
        if (i == pgm.lines && countSpaces == pgm.cols)
          break;
        countSpaces++;
        if (countSpaces == pgm.cols)
        {
          countSpaces = 0;
          i++;
        }
        values = strtok(NULL, " ");
      }
    }
    line++;
  } while (keepReading);
  fclose(f);
printf("cols: %d, lines: %d, highest: %d, matrix[0][0]: %d", pgm.cols, pgm.lines, pgm.highestValue, pgm.matrix[0][0]);
}

void resolveMatrix()
{
  Pgm pgm;
  printf("cols: %d, lines: %d, highest: %d", pgm.cols, pgm.lines, pgm.highestValue);
}

我有这个getInfo function 读取.pgm文件并将此文件内的值添加到我的struct内的matrix 当我在这样的 function 中执行 printf 语句时,它会打印出我想要的正确值。 但是当我尝试在另一个 function 中执行此操作时,它会打印出不同的值。 我认为这与 memory 地址有关,但我将如何解决这个问题:(

在您的resolveMatrix function 中,您使用的是 struct pgm而未对其进行初始化,因此它将打印在创建结构之前位于堆栈上 memory 位置的随机垃圾。

如果要使用在其他地方创建的结构,请将指向它的指针作为 function 参数传递:

void resolveMatrix(Pgm *pgm)
{
    printf("cols: %d, lines: %d, highest: %d", pgm->cols, pgm->lines, pgm->highestValue);
}

用法:

Pgm pgm;

// Initialize struct fields here ...

resolveMatrix(&pgm);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM