我有一个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;
}
答案 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);