私が持っていて、char 配列のchar x[3] = "123";
インデックス 1 とインデックス 2 " " だけを変換したいとしましょう。23
atoi
私はそれができることを知っていますchar z[2]; z[0]=x[1]; z[1]=x[2]; atoi(z);
が、それは私が求めているものではありません.
これを行うことができます
char x[4];
int i;
strcpy(x, "123");
i = atoi(x + 1);
x
は charへのポインタであるためx + 1
、次の char へのポインタです。で印刷しようとすると
printf("%s", x + 1);
出力として得23
られます。
ただし、 char 配列の長さを宣言する必要があることに注意してください。これは、末尾に対応するため\0
です。
文字列の最初の数字を変換してから残りの部分を変換する場合は、次のようにします。
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
atoi()
はい、変換を開始する最初の文字へのポインターを指定することで、そのような「接尾辞」文字列を変換できます。
const int i = atoi(x + 1);
これはサフィックスに対してのみ機能することに注意してください。これは、常に最初の'\0'
終了文字まで読み取られるためです。
また、質問のコメントで指摘されているように、これはコードにないターミネーターがあることを前提としていることにも注意してください。
絶対必要です:
char x[4] = "123";
あるいは単に
char x[] = "123";
また
const char *x = "123";
ターミネーターを合わせるために。終了配列がない場合、それは文字列ではなく、その一部へのポインターを渡すことatoi()
は無効です。