#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main(void)
{
int a,b,sub,i,count=0;char buffer[20],w[20];
scanf("%d",&a);
scanf("%d",&b);
sub=a-b;
if(sub>0)
{
scanf("%s",w); /*wrong answer*/
itoa(sub,buffer,10);
int l=strlen(buffer);
for(i=0;i<l;i++)
{
if(w[i]==buffer[i])
count++;
}
((count==l || count==l-1) && w[0]!='0') ? printf("accepted") : printf("Not accepted");
}
else printf("Sub operation returned negative value");
}
编译器的输出是
prog.c:4:6: warning: return type of 'main' is not 'int' [-Wmain]
void main(void)
^
prog.c: In function 'main':
prog.c:13:1: warning: implicit declaration of function 'itoa' [-Wimplicit-function-declaration]
itoa(sub,buffer,10);
^
/home/HCDVgj/ccHBnrc7.o: In function `main':
prog.c:(.text.startup+0x61): undefined reference to `itoa'
collect2: error: ld returned 1 exit status
我没有使用任何 long int 变量,但我仍然得到 ld return 1 exists。如何调试这些错误
最佳答案
int main()
这是您应该做的第一件事。scanf("%19s",w);
这样更好。itoa
是非标准的(因此您不会在任何标准实现中找到它)最好使用snprintf()
printf('%s",((count==l || count==l-1) && w[0]!='0') ? "accepted": "不接受");
我会说更紧凑。
snprintf
的使用
snprintf(target, size_of_target
1, "%d", source
2);
sprintf
没有指定要写入的字节数的参数,这可能会导致缓冲区溢出,这不是一件好事。
1:以字节为单位
2 : 源在这里是整数
一些值得一提的事情可以让你的想法更清晰或更准确
您指定的输出不是 c 程序的输出...在编译过程中您的编译器遇到错误然后生成这些输出。 -CiaPan
main()
不应为 void 返回类型,在正常终止的情况下应返回0
。异常终止通常由非零值表示。-David C. Rankin
关于c - 在 gcc 上编译时发生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41437731/