c – 在2d数组中检查null

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

输入文件是这样的:

pitk olpe pkey tope 

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

 $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", , "\000\377\377\177\000\000\037\355\336", , "\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"} 

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

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

checknxn函数:

 bool checknxn(char grid[10][10]) { int columns = 0; for(int i=0;i<10;i++) { if(grid[0][i]!=NULL) columns++; else { break; } } for(int i=1;i<10;i++) { for(int j=columns;j<10;j++) { if(grid[i][j]!=NULL) return false; } } int rows = 0; for(int i=0;i<10;i++) { if(grid[i][0]!=NULL) rows++; else { break; } } if (!(rows == columns)) return false; for(int i=0;i<rows;i++) { for(int j=0;j<columns;j++) { if(grid[i][j]==NULL) { return false; } } } return true; } 

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

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

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

 FILE *file1 = fopen(argv[1], "r"); // "r" for read char grid[10][10]; char c; for(int i=0;i<10;i++){ for(int j=0;j<10;j++){ fscanf(file1,"%c", &c); if (c == '\n') { grid[i][j] = '\0'; break; } if (c == ' ') { grid[i][j] = '\0'; continue; } if (c == '\0') { grid[i][j] = '\0'; continue; } else { grid[i][j] = c; } } } 

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

 memset(grid, 0, sizeof(grid[0][0]) * rows * columns); 

您的网格未完全初始化(您没有将每个单元格设置为例如: \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'; } } 

然后才做填充物。 不要混合它。

如果要检查每个单元格是否已填满,即:不是\0

  for(int i=0;i 

但是你想在其中加载C-string而C-strings以\0结尾。 将字符串加载到单元格中而不使用尾部\0或调整循环以检查row_length-2而不是row_length -1

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