【问题标题】:compiling in codeblock but not in hackerrank在代码块中编译但不在hackerrank中编译
【发布时间】:2018-09-07 14:35:08
【问题描述】:

我的程序在代码块上运行良好,没有任何警告,但是当我将代码提交给hackerrank时,它显示错误

 solution.c: In function ‘main’:
 solution.c:21:6: error: ‘main’ is normally a non-static function [- 
 Werror=main]
 int  main()
  ^~~~
cc1: some warnings being treated as errors

这是我的实际代码,是关于数据类型和字符串的简单问题

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char* concat(const char *s1, const char *s2)
{
    char *result = malloc(strlen(s1) + strlen(s2)+1 ); // +1 for the null-terminator
    // in real code you would check for errors in malloc here
    strcpy(result, s1);
    strcat(result, s2);
    return result;
}
int main(){
    int i=4.0,x;
    double d=4.0,y;
    char result[301],z[100];
    char* p=result;
    char s[50]="HackerRank ";
    scanf("%d",&x);
    scanf("%lf ",&y);

    int sum1=i+x;
    double sum2=d+y;
    p=concat(s,z);
    printf("%d\n",sum1);
    printf("%lf\n",sum2);
    printf("%s",p);



      return 0;



}

【问题讨论】:

  • 你说工作正常吗? main 中的变量 z 在做什么?不管怎样,这个错误信息看起来好像hackerrank软件有一个错误,你应该和他们的技术支持联系。
  • ^^^ 生成 UB :(
  • 是的..你需要了解@n.m.正在暗示。具有自动存储功能的变量未在 C 中初始化。您还应该查看 strlen() 的工作原理。
  • 还有,可能和你的错误无关,但是你在main()中使用后没有free()concat()的结果。

标签: c string


【解决方案1】:
solution.c:21:6: error: ‘main’ is normally a non-static function [- Werror=main]

该错误通常是由左括号和右括号之间的不匹配引起的。 因此,请在编译前再次检查所有括号是否匹配。

看到这个question 提到了同样的问题。

【讨论】:

  • 鉴于 OP 发布了完整的代码,这不是问题。无论如何,它似乎是“hackerrank”中的一个错误。
  • 代码还有其他错误。就像使用 malloc() 的“从 'void*' 到 'char*' 的无效转换”。不确定,它在“代码块”上如何正常工作。
  • @user846834 这不是 C 的无效转换;它适用于 C++。 C 允许使用几乎任何其他数据指针类型与void * 进行隐式转换。 OP 的 malloc 调用是 C 程序员的首选(没有 strlen 调用,我个人会采取不同的做法)。
【解决方案2】:

如果你在 main 里面创建 main 那么你也可能面临同样的问题

【讨论】:

  • 如果您是 OP,为什么要从其他帐户回答?
  • 那是我的房间搭档不是我
  • 对不起,我将更改我的用户名
  • 好的。 :) 另外,你能详细说明一下答案吗?我在 OP 的代码中没有看到第二个 main。还是说hackerrank自动将代码封装在一个大main中?
  • 请帮助我,我有疑问,没有人帮助我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 2012-11-10
  • 1970-01-01
  • 2017-02-06
  • 2021-05-24
  • 2013-05-12
  • 1970-01-01
相关资源
最近更新 更多