[英]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.