2014-09-24 3 views
1

Я пытаюсь создать простую функцию, которая ищет выбранный столбец для первого экземпляра значения, а затем возвращает строку, в которой она находится. Это будет поиск в предопределенной структуре, называемой «SPREADSHEET», , Однако у меня возникают серьезные проблемы.Ошибки сравнения указателей

Я получаю ошибку «несовместимый тип для аргумента 1 из memcpy» и еще пару ошибок. Вот мой код:

// 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, никогда не будет успешным. Помогите?

+1

try 'memcpy (& read, ss, sizeof (* ss));' – BLUEPIXY

+0

«несовместимый тип для аргумента 1 из memcpy» означает, что он должен быть «memcpy (& read, ss, sizeof (ss))». А как насчет других ошибок? – starrify

+2

@starrify: 'sizeof * ss'. – Deduplicator

ответ

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

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

Вы, вероятно, хотите sizeofSPREADSHEET, а не указатель на один. Самое простое решение здесь - вместо этого использовать sizeof(read).

Кроме того, первым параметром для memcpy должно быть место для копирования. Таким образом, вы хотите &read (адрес read), а не read (стоимость read).

1

Синтаксис тетсру() является void *memcpy(void *str1, const void *str2, size_t n)

read должен быть указатель, указывающий на ячейку памяти, то вы можете использовать memcpy()

Или использовать &read в memcpy().

+0

У меня есть память о гигантском дереве .... Было бы хорошей мишенью? – Deduplicator

Смежные вопросы