我有一个char数组“2468”,我想转换为int数组,以便于数学操作。但是当我运行项目时,它只是说“核心转储”错误。我不知道是什么原因引起的......
#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;
}
你应该阅读警告。他们随时为您提供帮助:
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,您将知道转换是否有效。
您需要将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;
}
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;
}
两个函数:首先将字符串中的字符转换为数字值,第二个将表字符串转换为字符串转换为数字。
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);