c - 在2d数组中检查null

时间:2016-10-03 00:06:00

标签: c arrays null grid boolean

我从输入文件中填充10 x 10个字符的网格。 我需要检查网格是否是正方形(即,有N×N个字符,其中N <= 10)

输入文件是这样的:

import numpy as np
name_list = ['jane doe' ,'sally smooth']
score = np.array([[102,],[106,]]) #make a numpy array 
row_format ="{:>15}" * (len(name_list))
for name, row in zip(name_list, score):
    print(row_format.format(name, *row))

当我在gdb中打印网格时,我得到以下结果:

           jane doe            102
       sally smooth            106

我的主函数中检查网格是否有效的部分是:

pitk
olpe
pkey
tope

checknxn功能:

$1 = {"pitk\000\000\000\000\366h", 
      "olpe\000\000\001\000\000", 
      "pkey\000\000\000\000\000", 
      "tope\000\000\000\000\000", 
      "\000\344\241\367\377\177\000\000", <incomplete sequence \336>, 
      "\000\377\377\177\000\000\037\355\336", <incomplete sequence \367>, 
      "\000\177\000\000\000\000\000\000\000", 
      "\000\000\000\000\000\000\000\000\000", 
      "\000\000\000\000\000\000\000\000\r\020", 
      "\000\000\000\000\000\000\000\000\000"}

这返回false,即使输入网格在这种情况下有效,我的程序也会退出。

我无法弄清楚为什么checknxn函数在这种情况下返回false。

更新:这是我初始化网格的方式:

  bool check = (checknxn(grid));
  if(check == false) {
    fprintf(stderr, "Invalid Input!\n");
    exit(0);
  }

2 个答案:

答案 0 :(得分:1)

你的网格没有完全初始化(你没有将每个单元格设置为例如:\0)所以你只有字符串和每个字符串的开头行正确定义。当你这样做的时候,初始化网格,你没有检查单元格是NULL,因为它们不是指针而是实际内容,所以你检查例如:\0如果你已经初始化了网格到那个值。

来自OP

的其他信息后,

编辑

要初始化该网格,您可以执行类似

的操作
char grid[10][10];
for(int i=0;i<10;i++){
  for(int j=0;j<10;j++){
    grid[i][1j] = '\0';
  }
} 

然后才做馅料。不要混合它。

如果您想检查每个单元格是否已填充,那就是:not \0

  for(int i=0;i<rows;i++) {
    for(int j=0;j<columns;j++) {
      if(grid[i][j] != `\0`) {
        return false;
      }
    }
  }

但是你想在其中加载C字符串,C字符串以\0结尾。将字符串加载到没有尾随\0的单元格中,或者调整循环以检查row_length-2而不是row_length -1

如果你有字符串,一个更简单的方法:测量每个中的字符串长度,如果它们都是相同的,行数对应于字符串长度你有一个方格。 / p>

答案 1 :(得分:1)

经典C错误未初始化数据。 Memset可能是要走的路(见下文)。

memset(grid, 0, sizeof(grid[0][0]) * rows * columns);
相关问题