Не могу привести номер чарта к int с помощью atoi () - PullRequest
0 голосов
/ 21 марта 2019

Я какое-то время возился с этим игрушечным кодом, но не могу понять, почему он не приведёт номер символа к целому числу.Может кто-нибудь объяснить это мне?

Спасибо,

#include <stdio.h> 

void fun(char a[]);



int main(int argc, char *argv[]) {
char b[] = {'2','8'};

fun(b);

}

void fun(char a[]){


int i = 2 * atoi(a[0]);
int j = 2 * atoi(a[1]);
printf("this is i: %d, this is j: %d\n", i, j);
}

, она возвращает эту ошибку: new.c: В функции 'fun': new.c: 25: 22: предупреждение: прохождениеаргумент 1 'atoi' делает указатель из целого числа без приведения [-Wint-преобразование] int i = 2 * atoi (a [0]);

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Лучшее представление о том, что на самом деле происходит в char * argv [] и полностью функциональный код!

#include <stdio.h> 

void fun(char *a[]);

int main(int argc, char *argv[]) {
// assume command line input was:
// ./a.out 10 11
printf("argc: %d\n", argc);
printf("argv[0]: %s\n", argv[0]);
printf("argv[1]: %s\n", argv[1]);
printf("argv[2]: %s\n", argv[2]);
printf("argv[argc]: %s\n", argv[argc]);
printf("\n");

char c[] = {"10\0"};
char d[] = {"4\0"};
char e[] = {"7\0"};
char n[] = {'\0'};
char *a[] = {c, d, e, n};

fun(a);

}

void fun(char *a[]){
int j = 0;

while(*a[j] != '\0'){
    printf("atoi(a[%d]): %d\n", j, atoi(a[j]));
    j++;
}// end of while
0 голосов
/ 21 марта 2019

Предполагая, что вам нужно конвертировать 2 и 8 символов отдельно в число. Вам нужно два разных массива для преобразования чисел

char a[] = "2";
char b[] = "8";

i = atoi (a);
j = atoi (b);

Если вы хотите преобразовать только однозначные числа, проще использовать символы вместо строк, как показано ниже

char a = '2';
char b = '8';

i = '2' - '0';
j = '2' - '0';
...