【问题标题】:Struct array is printing garbage结构数组正在打印垃圾
【发布时间】:2014-10-10 23:20:21
【问题描述】:

我在打印我的结构数组时遇到问题。它是这样初始化的:

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 循环用值填充数组。

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

【问题讨论】:

  • 嗯,你的循环从输入文件中读取index 值。是什么让你觉得它曾经读过0 作为索引?我从这里看不到您的文件输入文件的内容。没有人可以。我们应该如何知道哪些index 值存在哪些不存在?此外,您确定您的初始化周期甚至可以运行吗?

标签: c arrays struct printf


【解决方案1】:

你说

它是这样初始化的

struct matrix tokens[nbrState][12];

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

如果你想要你的数组初始化,你必须自己初始化它。比如这个声明

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

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

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

【讨论】:

  • nbrState 将在程序运行后保持不变。但可以根据文件的输入而改变。
  • 我有一个 for 循环向数组添加值。然后我尝试打印它们。
  • @user2835532:嗯,你的循环从输入文件中读取index 值。是什么让你觉得它曾经读过0index?我从这里看不到您的文件输入文件的内容。没有人可以。我们应该如何知道哪些index 值存在哪些不存在?此外,您确定您的初始化周期甚至可以运行吗?