2015-10-22 3 views
-1

У меня нет опыта работы с C бы то ни было (хотя я использую C# много), но я ищу, чтобы скомпилировать код C:C2113 Ошибка при компиляции кода C

http://practicalcryptography.com/cryptanalysis/stochastic-searching/cryptanalysis-bifid-cipher/

Когда я использую Command Developer строка в VS2015 скомпилировать его с cl.exe, я ударил ошибку:

c:\simple>cl bifidcrack.c 
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23026 for x86 
Copyright (C) Microsoft Corporation. All rights reserved. 

bifidcrack.c 
bifidcrack.c(113): error C2113: '-': pointer can only be subtracted from another 
pointer 
bifidcrack.c(114): error C2113: '-': pointer can only be subtracted from another 
pointer 

c:\simple> 

Почему это неисправного скомпилировать? Другие (в комментариях к странице) предположительно составили его без каких-либо проблем.

C: \ просто содержит:

C:\simple>dir 
Volume in drive C is OS 
Volume Serial Number is AA86-3F24 

Directory of C:\simple 

22/10/2015 02:50 <DIR>   . 
22/10/2015 02:50 <DIR>   .. 
12/10/2015 12:06    4,491 bifidcrack.c 
12/10/2015 12:06   7,301,392 qgr.h 
12/10/2015 12:06    574 scoreText.c 
12/10/2015 12:06    44 scoreText.h 
       4 File(s)  7,306,501 bytes 
       2 Dir(s) 14,560,649,216 bytes free 

C:\simple> 

В соответствии с просьбой, вот линии в вопросе:

char *bifidDecipher(char *key, int period, char *text, char *result, int len){ 
    int i, j; 
    char a,b; /* the digram we are looking at */ 
    int a_ind,b_ind; 
    int a_row,b_row; 
    int a_col,b_col; 

    for (i = 0; i < len; i += period){ 
     if (i + period > len){ 
      period = len - i; 
     } 
     for (j = 0; j < period; j ++){ 
      a = text[i+(j/2)]; 
      b = text[i+((period+j)/2)]; 

      /*if (index(key,a) == NULL || index(key,b) == NULL) break;*/ 
113   a_ind = (int)(index(key,a) - key); 
114   b_ind = (int)(index(key,b) - key); 
      a_row = a_ind/5; 
      b_row = b_ind/5; 
      a_col = a_ind % 5; 
      b_col = b_ind % 5; 
      if (j % 2 == 0){ 
       result[i+j] = key[5*a_row + b_col]; 
      } else { 
       result[i+j] = key[5*a_col + b_row]; 
      } 
     } 
    } 
    result[i] = '\0'; 
    return result; 
} 
+1

Строки кода, на которые ссылаются, были бы полезны ... –

+0

Добавлен фрагмент bifidcrack.c и перечислены, которые являются строками 113 и 114. Надеюсь, что это поможет! – tom982

+0

Нужно знать, что такое «индекс». Если он не возвращает символ "char *", то да, это ошибка компиляции. –

ответ

0

Ошибка говорят, что на линии 113 и 114 bifidcrack.ca указателя является используется для вычитания из элемента, отличного от указателя. Не видя фактического кода, так как страница недоступна, я бы предположил, что есть неправильный разыменованный указатель.

Нечто подобное этому сценарию

int * pointer_int = 5; 
int non_pointer = 4; 

Это то, что она в настоящее время выглядеть

int new_int = non_pointer - pointer_int; 

Хотя это должно выглядеть следующим образом

int new_int = non_pointer - (int*)pointer_int; 

Вам придется открыть файл и перейдите к этим строкам, чтобы увидеть, как их изменить.

+0

Извините, ссылка только что спустилась, и я не заметил. Я добавил часть bifidcrack.c, а остальное можно получить через TWBM: http://web.archive.org/web/20151018181750/http://practicalcryptography.com/cryptanalysis/stochastic-searching/cryptanalysis-bifid- cipher/ Я не знаю C, но я попробую и скрипку с кодом. Спасибо за совет. – tom982

+0

Поскольку ключ является указателем, любой возвращаемый индекс также должен быть указателем. Это ваша ошибка. Вы можете попробовать добавить (char *) до последнего ключа в каждой из этих строк. – optomus

+0

Спасибо, но я добавил актерский состав, и он вернул ту же ошибку при компиляции. – tom982

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