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

标签 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

编辑:这是电子表格结构。

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

typedef struct SpreadSheet SPREADSHEET;

最佳答案

您的错误在这里:

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 也正确地从零开始,尽管它至少看起来可能是这样。

关于c - 打印多维数组仅打印第一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26027196/

相关文章:

令人困惑的 C 语法

c - Haversine 方位角计算的结果不准确

c - 通过读取 proc/<pid>/status 打印进程信息

c - C 标准是否要求编译时常量表达式求值?

c - Unix fork parent id 不一致

C语言: is it bad to define functions in ..h文件中没有声明的c文件?

c - 从 gtk 窗口缩放 cairo 上下文绘制调用需要太长时间

c++ - 关于 Swift 中从 C 文件访问 "typedef void PaStream;"的正确语法有什么帮助吗?

c - 在哪里使用 volatile ?

c - 在 C 中通过引用传递结构,但修改并非全部存在