c - 在 gcc 上编译时发生错误

标签 c gcc

#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_target1, "%d", source2);

sprintf 没有指定要写入的字节数的参数,这可能会导致缓冲区溢出,这不是一件好事。

1:以字节为单位
2 : 源在这里是整数

一些值得一提的事情可以让你的想法更清晰或更准确

  • 您指定的输出不是 c 程序的输出...在编译过程中您的编译器遇到错误然后生成这些输出。 -CiaPan

  • main() 不应为 void 返回类型,在正常终止的情况下应返回 0。异常终止通常由非零值表示。-David C. Rankin

关于c - 在 gcc 上编译时发生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41437731/

相关文章:

C中两个函数的比较

c - 线计数和异常结果

c - 如何编码(marshal) dbus 字符串数组 (ao) 类型?

c - 如何让信号处理程序打印时间已过?

macos - 指定编译器 Homebrew 安装

c++ - gcc stdio.h 错误

c - 为什么字符串的大小在 main 和函数中不同?

c++ - 更改 gcc/g++ 版本会导致段错误

使用命名空间时,C++ 模板函数无法使用 g++ 进行编译

c - 在没有 strtok/lexer 的情况下将字符串解析为标记