передача аргумента 1 'atoi' делает указатель из целого числа без приведения .... может ли любое тело помочь мне - PullRequest
0 голосов
/ 12 июня 2010
#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 ]

2 голосов
/ 12 июня 2010

Нет такой функции, как strrev, объявленной в вашей программе. Компилятор предполагает, что это какая-то неизвестная функция, которая возвращает int. Отсюда и диагностическое сообщение, поскольку atoi ожидает указатель, а не int.

Что такое strrev? И почему вы пытаетесь вызвать эту функцию, не объявив ее сначала? Стандартная библиотека C не имеет такой функции, поэтому включение тех стандартных заголовков, которые вы уже включили, недостаточно (если вы не предполагаете какую-то расширенную реализацию).

0 голосов
/ 12 июня 2010

Помимо проблемы 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;
}

просто чтобы сказать (возврат не на месте), вы должны предпочесть использование strtol или strtoul вместо atoi и реализовать также itoa, поскольку afaik также не является стандартным (вы можете использовать sprintf в любом случае, если база 10).

...