指针比较导致错误

时间:2014-09-24 11:11:55

标签: c

我正在尝试创建一个简单的函数,在选定的列中搜索值的第一个实例,然后让它返回它所在的行。这将搜索名为“SPREADSHEET”的预定义结构。但是,我遇到了一些重大问题。

我收到错误“memcpy的参数1的不兼容类型”以及其他一些错误。这是我的代码:

// Searches down the specified column for a row which contains text.
// The search starts at row number rowNum;
// The result is the row number (where the first row is numbered 0).
// If the text is not found, the result is -1.
int SS_FindRow(SPREADSHEET *ss, int colNum, char *text, int startNum) {
    if (debug)
        fprintf(stderr, "DEBUG: Call to SS_FindRow(--,%d,%s,%d)\n",
            colNum, text, startNum);
    // TO BE COMPLETED!
    SPREADSHEET read;
    memcpy(read,ss,sizeof(ss));
    int i;
    for(i = startNum; i < MAXROWS; i++) {
        if(strcmp(&read.contents[i][colNum],text)==0)
            return i;
    }
    return -1;
}

我真的很难过可能导致这种情况的原因。运行程序,无论我的输入是什么,if语句永远不会成功。帮助

2 个答案:

答案 0 :(得分:2)

int SS_FindRow(SPREADSHEET *ss, int colNum, char *text, int startNum) {
                           ^

memcpy(read,ss,sizeof(ss));
                      ^^

您可能想要sizeof一个SPREADSHEET,而不是一个指针。这里最简单的解决方案是使用sizeof(read)代替。

此外,memcpy的第一个参数需要是复制到的位置。因此,您需要&readread的地址),而不是readread的值)。

答案 1 :(得分:1)

memcpy()的语法是 void *memcpy(void *str1, const void *str2, size_t n)

read必须是指向内存位置的指针,然后您可以使用memcpy()

或在&read中使用memcpy()