[英]Segmentation fault error while converting string to integer using atoi function
[英]Conversion of char array to integer using atoi caused segmentation fault
我正在尝试使用atoi
将char数组转换为整数。 但是下面的代码会产生分段错误。
码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
char a[10] = "1234567890";
int x,i;
for(i=0;i<strlen(a);i++){
x=atoi(a[i]);
printf("%d",x);
}
return 0;
}
我做错了什么,还有什么可以代替atoi
使用的?
char a[10] = "1234567890";
这为空终止符留出了空间。 因此strlen(a)
导致不确定的行为。 声明a
这样的:
const char a[] = "1234567890";
或像这样:
const char *a = "1234567890";
随后,您对atoi
的呼叫不正确。 您应该将指针传递给以空终止的字符串。 您传递了一个char
。 也许您的意思是通过a+i
:
x=atoi(a+i);
再说一遍,循环的原因一点也不明显。 有什么问题:
x = atoi(a);
同样, atoi
是个臭名昭著的功能。 它没有提供任何有意义的方式来检测输入中的错误。 更好的方法是使用sscanf
。
您可以像这样将所有内容放在一起:
#include<stdio.h>
int main(void)
{
const char *a = "1234567890";
for(size_t i = 0; a[i]; i++)
{
int x;
if (sscanf(a + i, "%d", &x) == 1)
{
printf("%d\n", x);
}
}
return 0;
}
输出为:
1234567890 234567890 34567890 4567890 567890 67890 7890 890 90 0
但是我怀疑那是你想要的。 我怀疑您真的想要这样:
#include<stdio.h>
int main(void)
{
int x;
if (sscanf("1234567890", "%d", &x) == 1)
{
printf("%d\n", x);
}
return 0;
}
输出为:
1234567890
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.