我正在尝试创建一个简单的函数,在选定的列中搜索值的第一个实例,然后让它返回它所在的行。这将搜索名为“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语句永远不会成功。帮助
答案 0 :(得分:2)
int SS_FindRow(SPREADSHEET *ss, int colNum, char *text, int startNum) {
^
memcpy(read,ss,sizeof(ss));
^^
您可能想要sizeof
一个SPREADSHEET
,而不是一个指针。这里最简单的解决方案是使用sizeof(read)
代替。
此外,memcpy
的第一个参数需要是复制到的位置。因此,您需要&read
(read
的地址),而不是read
(read
的值)。
答案 1 :(得分:1)
memcpy()的语法是
void *memcpy(void *str1, const void *str2, size_t n)
read
必须是指向内存位置的指针,然后您可以使用memcpy()
或在&read
中使用memcpy()
。