【问题标题】:itoa using reverse(string) code showing error [closed]itoa 使用显示错误的反向(字符串)代码 [关闭]
【发布时间】:2014-06-18 21:06:56
【问题描述】:

为什么 ANSI C 不使用strrev 而不是创建这么大的反向函数?

此代码向我显示错误。请改正。什么是错误。我正在使用 Code::Blocks

我收到的错误消息:

c:\programfiles(x86)\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1......\libmingw32.a(main.o):main.c:(. text.startup+0xa7)||未定义对`WinMain@16'的引用|

#include <stdio.h>
#include <string.h>
#include <conio.h>

 void reverse(int n, char s[])
 {
     int c,i, j;

     for(i=0, j= strlen(s)-1; i<j; i++, j--){
         c=s[i];
         s[i]=s[j];
         s[j]=c;
     }
  }

 void itoa(int n, char s[])
 {
     int i=0 ,sign;

     if((sign=n) < 0 )
         n= -n;
     do{
         s[i++] = n%10 + '0';
     }while(n /=10 >0);

     if(sign <0)
         s[i++] = '-';

     s[i] = '\0';
     reverse(n, s);
 }

【问题讨论】:

  • 因为没有人需要反转一个字符串,除了家庭作业和实现 itoa。
  • nINT_MIN 时,n= -n; 是 2 的补码体系结构的未定义行为。正确的 itoa 实现不会这样做。
  • @MooingDuck 好的,这意味着我必须在普通条件下使用 strrev?
  • @PascalCuoq 我已经从 ANSI C 书中复制粘贴了这段代码,这 n=-n 是正确的。问题是我没有添加主函数。
  • @AbhimanyuAryan:不,他是对的,如果nINT_MINn = -n 将失败。代码有错误。

标签: c itoa


【解决方案1】:

您的代码没有入口点。你需要有一个main 函数,或者WinMain 什么的。

http://mingw-starter.blogspot.com/2008/02/mingw-sdl.html

另外,不要忘记添加 -mwindows 标志,如果您的 IDE 没有自动添加它(除了您想要链接的任何其他库之外)。如果你没有把它们按正确的顺序排列,你会得到一个链接器错误,抱怨缺少 WinMain@16 符号。

【讨论】:

  • 哦,对不起,我太笨了,但我没有注意……真的很抱歉
  • 它起作用了我只是添加了 main(){ return 0;} ....甚至没有使用任何这些函数
  • @AbhimanyuAryan:大概它在编译和链接的意义上“有效”。使用main() { return 0; }(注意:main() 应该是int main(void))程序不会做任何事情。
  • 知道了@KeithThompson 现在运行没有任何错误
猜你喜欢
  • 2016-02-28
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
相关资源
最近更新 更多