所以我有一个以多维数组形式存储的电子表格,我正在尝试创建一个打印行内容的函数。不幸的是,它似乎只打印第一个值,其余的打印是空白的。这可能是什么原因?
// 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;
答案 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
也是正确的零基础,尽管它至少看起来可能是。