簡體   English   中英

使用atoi將char數組轉換為整數會導致分段錯誤

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM