2014-09-24 79 views
1

我試圖做一個簡單的函數,爲一個值的第一個實例搜索一個選定的列,然後讓它返回它所在的行。這將搜索一個名爲「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語句,都不會成功。幫幫我?的memcpy的

+1

嘗試'memcpy(&read,ss,sizeof(* ss));' – BLUEPIXY 2014-09-24 11:14:51

+0

「memcpy的參數1的不兼容類型」表示它應該是memcpy(&read,ss,sizeof(ss))'。那麼其他錯誤呢? – starrify 2014-09-24 11:14:55

+2

@starrify:'sizeof * ss'。 – Deduplicator 2014-09-24 11:15:26

回答

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

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

read必須是一個指針指向的內存位置,那麼你可以使用memcpy()

或者在memcpy()使用&read

+0

我有一個巨大的樹的記憶......這是一個好目標嗎? – Deduplicator 2014-09-24 11:16:31