2

この文字列の最初の文字を整数として読み取るにはどうすればよいですか?

char *p = argv[1];

ありがとうございました!

4

1 に答える 1

5

あなたの質問はあいまいです。ここに3つの可能な解釈とそれらの答えがあります。

  1. Cの「文字列」のすべての文字は実際には小さな整数であり、配列にインデックスを付けるだけで取得できます。

    int first = p[0];
    
  2. 文字列の最初の文字が数字であり、その値を数字'0'にしたい場合は、 throughの文字コード'9'が連続して増加することが保証されているという事実を利用できます。

    int first_dv = -1;
    if (p[0] >= '0' && p[0] <= '9')
        first_dv = p[0] - '0';
    
  3. 誤ってスポークし、実際に文字列全体を10進数として処理したい場合は、を使用して処理しますstrtol。またはstrtoul、数値が負として解釈されないようにする必要がある場合は、次のようにします。

    char *endp;
    errno = 0;
    long numeric_value = strtol(p, &endp, 10);
    if (endp == p || *endp) {
        fprintf(stderr, "junk after number: %s\n", endp);
    } else if (errno) {
        fprintf(stderr, "%s: invalid number (%s)\n", p, strerror(errno));
    }
    

    これらはで宣言されてい<stdlib.h>ます。これは、他の多くの人が言うこととは対照的に、またはで行いませ。数値の後にジャンクがあったかどうかは通知されません。また、数値オーバーフローでプログラムがクラッシュする可能性があります。 。atoisscanfatoisscanf

于 2013-02-11T02:31:00.240 に答える