Почему Codeblocks запускает эту C программу без ошибок, но Codeforces показывает ошибку компиляции? - PullRequest
0 голосов
/ 22 февраля 2020

Следующий код работает нормально, пока я использую его в своем приложении блоков кода. Однако при решении проблемы «Четные шансы» в Codeforces путем отправки того же кода возникает ошибка компиляции.

Ошибка: недопустимое преобразование из 'void *' в 'long long int *' [-fpermissive]

Я совершенно новичок в C программировании. Итак, PLZ, помогите мне, как я могу исправить этот мой код.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
long long *arr, n, k, i, n1, n2, m;
scanf("%I64d%I64d", &n, &k);
arr=malloc(sizeof(long long)*n);
    n1=1;n2=2;
for(i=0;i<=n/2&&n1<=n;i++){
    arr[i]=n1;
    n1+=2;
    }
if(n%2!=0) m=n/2+1;
else m=n/2;
for(i=m;i<=n&&n2<=n;i++){
    arr[i]=n2;
    n2+=2;
    }
printf("%I64d", arr[k-1]);
free(arr);

return 0;
}

1 Ответ

1 голос
/ 22 февраля 2020

В Codeblocks вы должны компилировать его как файл c. Но в Codeforces код компилируется как cpp.

arr=malloc(sizeof(long long)*n);

Когда вы компилируете эту строку в C, mallo c выдаст указатель void*, который будет автоматически преобразуется в long long*

Но в случае cpp следует выполнить явное преобразование. Для запуска кода в cpp:

arr = (long long*)malloc(sizeof(long long) * n);

Это сделает работу. Прочитайте эту статью для разъяснения.

...