const char *s : | 変換対象文字列。 書式は[空白類文字][符号+][0][x][数値列]。このとき、[]内は省略可能。 また、符号(-)と接尾語(L/l/U/u)は含まない。 (例)un = strtoul(" +77", NULL, 10); printf("un=%lu\n", un); (結果)un=77 … " +77"を10進数として変換 |
char **endptr : | 変換不可能な文字列へのポインタの格納先。 (例)un = strtoul("77ABC", &e, 8); printf("un=%lu e=%s\n", un, e); (結果)un=63 e=ABC … "77"を8進で変換。"ABC"は変換不可能 NULLの場合には、変換不可能な文字列への処理は行わない。 (例)un = strtoul("77ABC", NULL, 8); printf("un=%lu\n", un); (結果)un=63 … "77"を8進で変換。"ABC"は捨てる |
int base : | 基数。 = 0 :Cの定数表記に従う。つまり、0が先頭なら8進数、0xまたは0Xが先頭なら 16進数。それ以外なら10進数。 (例)un = strtoul("077ABC", &e, 0); printf("un=%lu e=%s\n", un, e); (結果)un=63 e=ABC … "077"を8進で変換。"ABC"は変換不可能 = 2 〜 36 :それぞれの基数。つまり5なら5進数で変換。 (例)un = strtoul("123456", &e, 5); printf("un=%lu e=%s\n", un, e); (結果)un=194 e=56 … "1234"を5進で変換。"56"は変換不可能 |
成功時 : | s の値をunsigned longで返却。 |
失敗時 : | 0 (例)un = strtoul("ABCDEF", &e, 0); printf("un=%lu e=%s\n", un, e); (結果)n=0 e=ABCDEF … "ABCDEF"は10進変換できない ※正しい値が表現可能な値の範囲外であるとき、ULONG_MAXを返し、errnoにはマクロERANGEの値を格納する。 |
#include <stdlib.h> #include <stdio.h> #include <errno.h> /* ERANGEを使用するために必要 */ #include <limits.h> /* ULONG_MAXを使用するために必要 */ int main(void) { char s[128], *e; unsigned long un; int base; printf("何進数で変換しますか。"); scanf("%d", &base); printf("変換する数値を入力してください。"); scanf("%s", s); un = strtoul(s, &e, base); if (errno != ERANGE) { printf("変換数値=%lu\n", un); if (*e != '\0') { printf("変換不可能部分=%s\n", e); printf("%d文字目の\'%c\'が変換不可\n", e-s+1, *e); } } else if (un == ULONG_MAX) printf("unsigned long値で表現できる値を上回りました。\n"); return 0; }【実行結果例1】
何進数で変換しますか。20 変換する数値を入力してください。defghijklmn 変換数値=879335179 変換不可能部分=klmn 8文字目の'k'が変換不可 ※緑字はキーボードからの入力
▼戻る▼
「初心者のためのポイント学習C言語」 Copyright(c) 2000-2004 TOMOJI All Rights Reserved