【发布时间】: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。
-
当
n为INT_MIN时,n= -n;是 2 的补码体系结构的未定义行为。正确的itoa实现不会这样做。 -
@MooingDuck 好的,这意味着我必须在普通条件下使用 strrev?
-
@PascalCuoq 我已经从 ANSI C 书中复制粘贴了这段代码,这 n=-n 是正确的。问题是我没有添加主函数。
-
@AbhimanyuAryan:不,他是对的,如果
n是INT_MIN,n = -n将失败。代码有错误。