为什么 Codeblocks 运行 这个 C 程序没有错误,但 Codeforces 显示编译错误?
How come Codeblocks run this C program without errors but Codeforces show compilation error?
以下代码在我的代码块应用程序中使用时运行良好。但是,当通过提交相同的代码解决 Codeforces 中的 "Even Odds" 问题时,它给我一个编译错误。
Error:invalid conversion from 'void*' to 'long long int*' [-fpermissive]
我对 C 编程还很陌生。所以,请帮助我如何修复我的这段代码。
#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;
}
在 Codeblocks 中,您必须将其编译为 c 文件。但是在 Codeforces 中,代码被编译为 cpp。
arr=malloc(sizeof(long long)*n);
当你在 C 中编译该行时,malloc 将抛出一个 void*
的指针,该指针将自动转换为 long long*
但是cpp的话,需要进行显式转换。到运行 cpp中的代码:
arr = (long long*)malloc(sizeof(long long) * n);
这样就可以了。
阅读 this 文章以了解清楚。
以下代码在我的代码块应用程序中使用时运行良好。但是,当通过提交相同的代码解决 Codeforces 中的 "Even Odds" 问题时,它给我一个编译错误。
Error:invalid conversion from 'void*' to 'long long int*' [-fpermissive]
我对 C 编程还很陌生。所以,请帮助我如何修复我的这段代码。
#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;
}
在 Codeblocks 中,您必须将其编译为 c 文件。但是在 Codeforces 中,代码被编译为 cpp。
arr=malloc(sizeof(long long)*n);
当你在 C 中编译该行时,malloc 将抛出一个 void*
的指针,该指针将自动转换为 long long*
但是cpp的话,需要进行显式转换。到运行 cpp中的代码:
arr = (long long*)malloc(sizeof(long long) * n);
这样就可以了。 阅读 this 文章以了解清楚。