将char数组转换为int数组(C)

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

标签: c arrays char atoi

我有一个char数组“ 2468”,我想将其转换为一个int数组,以便进行简单的数学操作。但是,当我运行该项目时,它只会显示“ Core dumped”错误。我不知道是什么原因造成的...

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

int main() {
    int i = 0;
    char charArray[] = "2468";
    int intArray[20];
    for (i = 0; i < strlen(charArray); ++i) {
        intArray[i] = atoi(charArray[i]);
        printf("%d", intArray[i]);
    }
    return 0;
}

3 个答案:

答案 0 :(得分:1)

您需要将char中的每个charArray转换为字符串以传递给atoi

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

int main() {
    int i = 0;
    char charArray[] = "2468";
    int intArray[20];
    for (i = 0; i < strlen(charArray); ++i) {
        // Convert character to string
        char convert[2] = {charArray[i], 0};
        // Pass string to atoi
        intArray[i] = atoi(convert);
        printf("%d", intArray[i]);
    }
    return 0;
}

答案 1 :(得分:1)

您应该阅读警告。他们可以为您提供帮助:

b.c: In function ‘main’:
b.c:11:37: warning: passing argument 1 of ‘atoi’ makes pointer from integer without a cast [-Wint-conversion]
         intArray[i] = atoi(charArray[i]);
                            ~~~~~~~~~^~~
In file included from b.c:4:
/usr/include/stdlib.h:104:30: note: expected ‘const char *’ but argument is of type ‘char’
 extern int atoi (const char *__nptr)
                  ~~~~~~~~~~~~^~~~~~

但是除此之外,为什么还要使事情复杂化?由于您要复制数字而不是数字,因此请执行以下操作:

for (i = 0; i < strlen(charArray); ++i) {
    intArray[i] = charArray[i] - '0';
}

如果要防止错误,请首先使用isdigit(charArray[i])进行检查。请记住,atoi会在错误时返回0,因此,如果得到0,就知道转换是否有效。

答案 2 :(得分:0)

int main() {
    int i = 0;
    char charArray[] = "2468";
    int intArray[20];
    while(charArray[i])
    {
        intArray[i] = charArray[i] - '0');
        printf("%d", intArray[i++]);
    }
    return 0;
}

两个函数:第一个将char从字符串转换为数字值,第二个将表指针转换为字符串到数字。

void convert_charsToDigits(const char *str, int *arr)
{
    int c;
    while(*str)
    {
        if(!isdigit(c = *str++)) continue;
        *arr++ = c - '0';
    }
}

void convert_stringsToInts(const char **str, int *arr)   //Takes NULL terminated string table
{
    while(*str)
    {
        *arr++ = atoi(*str++);
    }
}

用法

char *cstr = "696"
char *str = {"2345", "455667", NULL};
int arr[5];

convert_charsToDigits(cstr, arr);
convert_stringsToInts(str, arr);