开发者

passing argument 1 of 'atoi' makes pointer from integer without a cast....can any body help me

#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){
     开发者_如何学JAVA       printf("%d\n",ans[i]);
            i++;
            }
}


There's no such function as strrev declared in your program. The compiler assumes that it's some unknown function that returns int. Hence the diagnostic message, since atoi expects a pointer, not an int.

What's strrev? And why are you attempting to call this function without declaring it first? C standard library has no such function, so including those standard headers that you have included already is not enough (unless you are assuming some extended implementation).


Apart the problem of strrev which is not standard and can be easily implemented e.g.

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;
}

just to say (not-in-place reversion), you should prefer the use of strtol or strtoul instead of atoi and implement also itoa since afaik that is not standard too (you could use sprintf anyway if the base is 10).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜