[英]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.