打印多维数组仅打印第一列

时间:2014-09-24 21:55:41

标签: c

所以我有一个以多维数组形式存储的电子表格,我正在尝试创建一个打印行内容的函数。不幸的是,它似乎只打印第一个值,其余的打印是空白的。这可能是什么原因?

// Outputs the specified row of the spreadsheet.
// It is printed as one line on standard output.
void SS_PrintRow(SPREADSHEET *ss, int rowNum) {
    if (debug)
        fprintf(stderr, "DEBUG: Call to SS_PrintRow(--,%d)\n", rowNum);
    // TO BE COMPLETED!
    if(rowNum >= MAXROWS || rowNum < 0){
        printf("-- row number outside range\n");
        return;
    }
    SPREADSHEET read;
    memcpy(&read,ss,sizeof(*ss));
    int i;
    for(i = 0; i < MAXCOLS ;i++){
        read.contents[rowNum][i][MAXLEN] = '\0'; // force null termination
        printf("%s ",read.contents[rowNum][i]);
    }
    return;
}

行值:

Jane,24,122.3,brunette

输出:

Jane

编辑:这是SPREADSHEET结构。

struct SpreadSheet {
    char *fileName;
    int  numRows;
    int  numCols;
    char contents[MAXROWS][MAXCOLS][MAXLEN];
};

typedef struct SpreadSheet SPREADSHEET;

1 个答案:

答案 0 :(得分:0)

您的错误在这里:

read.contents[rowNum][i][MAXLEN] = '\0'

这超出了数组的边界一个元素。回想一下,基于C的数组使用0...(len-1)编制索引。将您的结构定义为:

struct SpreadSheet 
{
    char *fileName;
    int  numRows;
    int  numCols;
    char contents[MAXROWS][MAXCOLS][MAXLEN];
};

违规行应该是:

read.contents[rowNum][i][MAXLEN-1] = '\0';

我祈祷rowNum也是正确的零基础,尽管它至少看起来可能是。