3

私が持っていて、char 配列のchar x[3] = "123";インデックス 1 とインデックス 2 " " だけを変換したいとしましょう。23atoi

私はそれができることを知っていますchar z[2]; z[0]=x[1]; z[1]=x[2]; atoi(z);が、それは私が求めているものではありません.

4

3 に答える 3

6

これを行うことができます

char x[4];
int i;

strcpy(x, "123");
i = atoi(x + 1);

xは charへのポインタであるためx + 1、次の char へのポインタです。で印刷しようとすると

printf("%s", x + 1);

出力として得23られます。

ただし、 char 配列の長さを宣言する必要があることに注意してください。これは、末尾に対応するため\0です。

于 2013-07-11T15:22:35.333 に答える
2

文字列の最初の数字を変換してから残りの部分を変換する場合は、次のようにします。

char x[] = "123";

int first = x[0]-'0';
int rest  = atoi(&x[1]);

printf("Answers are %d and %d\n", first, rest);

結果:

Answers are 1 and 23
于 2013-07-11T15:24:29.530 に答える
1

atoi()はい、変換を開始する最初の文字へのポインターを指定することで、そのような「接尾辞」文字列を変換できます。

const int i = atoi(x + 1);

これはサフィックスに対してのみ機能することに注意してください。これは、常に最初の'\0'終了文字まで読み取られるためです。

また、質問のコメントで指摘されているように、これはコードにないターミネーターがあることを前提としていることにも注意してください。

絶対必要です:

char x[4] = "123";

あるいは単に

char x[] = "123";

また

const char *x = "123";

ターミネーターを合わせるために。終了配列がない場合、それは文字列ではなく、その一部へのポインターを渡すことatoi()は無効です。

于 2013-07-11T15:22:16.373 に答える