Struct数组是打印垃圾

时间:2014-10-10 23:20:22

标签: c arrays struct printf

我在打印结构数组时遇到问题。它初始化如下:

struct matrix tokens[nbrState][12];

然后我尝试使用以下代码将其打印出来:

    printf("%d", tokens[0][0].state);
    for(int q = 0; q < nbrState; q++){
            for(int r = 0; r < 12; r++){
                    printf("%d", tokens[q][r].state);
            }
    }

如何只是回馈

160833216083325909500442637211181530452359314445659095247095039827295039732859091035295039760059091066417471141950397584105931452485931525045870278695909110245869685280135590599950397784950397744593145248159314402459314316859095284905931452481590950044135934508013593144456590952470095039760058696836095039787258698266456147669503978565869965120593144552593143168419536358702168841950960596593143168950398056950398016593144552159315536059315450459095284905931445521015931545041048576587404166341899271605931553609503978729503978563593450804195363-1141298268758698266459314316800419611295039881600950398592587297673016950398176950397984091005908849605884315520000050-100950398592419

我不确定为什么。我也使用for for循环为数组填充值。

while ( fscanf ( fp, "%d/%d%c", &index, &separateInt, &separateChar) == 3) {
    for(int i = 0; i < 12; i++){
            tokens[index][i].state = separateInt;
            }
    }

1 个答案:

答案 0 :(得分:1)

你说

  

它被初始化为

struct matrix tokens[nbrState][12];

但是上面的声明并没有初始化任何东西(除非你的数组是用静态存储持续时间声明的)。以这种方式声明的本地数组将在开头包含垃圾。那显然是你在打印的东西。

如果您希望阵列已初始化,则必须自行初始化。例如,这个声明

struct matrix tokens[nbrState][12] = { 0 };

将使用零初始化所有内容,假设nbrState是常量。

如果nbrState不是常数,那么您将无法在声明中使用= { ... }初始值设定项。您必须手动,使用循环或以其他方式为数组元素分配初始值。