-1

到目前为止,这是我的代码

#define MAXROWS     60
#define MAXCOLS     60
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>


main()
{
char TableFileName[100];
char PuzzleFileName[100];
char puzzle[MAXROWS][MAXCOLS];
char line[MAXCOLS];
FILE *TableFilePtr;
int cols;
int rows;
cols=0;
rows=0;
printf("Please enter the table file name: ");
scanf("%s",TableFileName);


/* ... */

TableFilePtr = fopen(TableFileName, "r");
//printf("\n how many rows and colums are there?  separate by a space: ");
 //  scanf("%d %d",&rows, &cols);

while(fgets(line, sizeof line, TableFilePtr) != NULL)
{
    for(cols=0; cols<(strlen(line)-1); ++cols)
    {
        puzzle[rows][cols] = line[cols];
    }
    /* I'd give myself enough room in the 2d array for a NULL char in 
       the last col of every row.  You can check for it later to make sure
       you're not going out of bounds. You could also 
       printf("%s\n", puzzle[row]); to print an entire row */
    puzzle[rows][cols] = '\0';
    ++rows;
}
/*int c;
for(c=0; c<MAXROWS; ++c){
    fgets(puzzle[rows], sizeof puzzle[rows], TableFilePtr);
}*/
printf("%s",puzzle[5][5]);
}

我想做的是让它从一个文本文件中读取,该文本文件在 txt 文件中包含一个 wordsearch,因此它只有随机字母。我希望能够做到,这样我就可以说拼图[5][5],它给了我第 4 行和第 4 列中的字符。我遇到了分段错误,但我不知道如何修复它。

4

3 回答 3

2

您正在尝试打印一个字符串printf("%s", puzzle[rows][cols])并给出 a char puzzle[rows][cols]is 1 个字符而不是字符串。

这样做:printf("%c", puzzle[rows][cols]);相反。

于 2013-03-25T02:49:06.130 回答
0

除了在将字符写入拼图数组时没有检查拼图数组的边界外,我没有看到明显的错误。所以我认为可能的原因是您的输入文件太大而无法放入拼图数组中,然后数组已溢出。

于 2013-03-25T03:11:19.417 回答
0
char puzzle[MAXROWS][MAXCOLS];
char line[MAXCOLS];
//...
while(fgets(line, sizeof line, TableFilePtr) != NULL)
{
    for(cols=0; cols<(strlen(line)-1); ++cols)
    {
        puzzle[rows][cols] = line[cols];
    }
    puzzle[rows][cols] = '\0';
    ++rows;
}

这是危险的,因为您永远不会检查行数是否小于 MAXROWS 或每行的长度是否小于 MAXCOLS。这意味着格式错误的数据文件可能会导致您写入超出puzzle数组的范围,这可能会导致分段错误、内存损坏或其他问题。

要修复,您需要在循环条件中包含限制,如下所示:

while (frets(line, sizeof line, TableFilePtr) != NULL && rows < MAXROWS) {
    for (cols=0; cols<(strlen(line)-1) && cols < MAXCOLS; ++cols) {
        //...
于 2013-03-25T02:57:46.433 回答