无法使用atoi()将char号转换为int

时间:2019-03-21 02:28:19

标签: c casting atoi

一段时间以来,我一直在弄乱这个玩具代码,但是我不知道为什么它不能将char数转换为int。有人可以向我解释吗?

谢谢

#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:警告:传递“ atoi”的参数1使指针从整数开始而没有强制转换[-Wint-conversion] int i = 2 * atoi(a [0]);

2 个答案:

答案 0 :(得分:0)

假设您需要将28字符分别转换为数字。您需要两个不同的数组来转换数字

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

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

如果您只想转换一位数字,那么使用字符而不是字符串的简单方法如下所示:

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

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

答案 1 :(得分:0)

更好地表示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