传递'atoi'的参数1使得整数指针没有强制转换....任何身体都可以帮助我

时间:2010-06-12 05:55:30

标签: c atoi

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

int main(){
    int n;
    int a,b,ans[10000];
    char *c,*d,*e;
    int i = 0;
    c = (char*)(malloc(20 * sizeof(char)));
    d = (char*)(malloc(20 * sizeof(char)));
    scanf("%d",&n);
    while(i < n){
            scanf("%d",&a);
            scanf("%d",&b);
            itoa(a,c,10);
            itoa(b,d,10);
            a = atoi(strrev(c)) + atoi(strrev(d));
            itoa(a,c,10);
            e = c;
            while(*e == '0')e++;
            ans[i] = atoi(strrev(e));
            i++;
            }
    i = 0;
    while(i < n){
            printf("%d\n",ans[i]);
            i++;
            }
}

2 个答案:

答案 0 :(得分:2)

您的程序中没有声明strrev这样的功能。编译器假定它是一些返回int的未知函数。因此诊断消息,因为atoi需要一个指针,而不是int

什么是strrev?你为什么试图在不首先声明它的情况下调用此函数? C标准库没有这样的功能,所以包括你已经包含的那些标准头文件是不够的(除非你假设一些扩展实现)。

答案 1 :(得分:0)

除了strrev的问题,这个问题不是标准的,可以很容易地实现,例如

char *strrev(char *s)
{
  size_t l = strlen(s), i;
  char *r = malloc(l + 1);
  if ( r != NULL ) {
    for(s += l-1, i=0; i < l; i++, s--) r[i] = *s;
    r[i] = '\0';
  }
  return r;
}

就是说(非就地回复),你应该更喜欢使用strtolstrtoul而不是atoi,并且也可以实现itoa,因为afaik也不是标准的(如果基数是10),你可以使用sprintf