COHERENT manpages
This page displays the COHERENT manpage for strtoul() [Convert string to unsigned long integer].
List of available manpages
Index
strtoul() -- General Function (libc) Convert string to unsigned long integer #include <stdlib.h> unsigned long strtoul(string, tailptr, base) char *string; char **tailptr; int base; strtoul() converts the number given in string to a unsigned long and returns its value. It is the unsigned long counterpart of strtol() and a more general version of the function atol(). strtoul() also stores a pointer to the first character following the number through tailptr, provided tailptr does not equal NULL. base gives the base of the number being read, either zero or a value from two to 36. If the given base is zero, strtoul() determines an implicit base for the number: hexadecimal if the number starts with 0x or 0X, octal if the number starts with 0, or decimal otherwise. Alternatively, the user can specify an explicit base between two and 36. strtoul() parses the string into three portions: beginning, subject sequence, and tail. The beginning consists of zero or more white-space characters that begin the string. The subject sequence is the portion of the string that strtoul() converts into an unsigned long. It consists of an optional sign character, an optional prefix 0x or 0X if the base is 16, and a nonempty sequence of digits in the specified base. For example, if the base is 16, then strtoul() recognizes numeric characters `0' to `9' and alphabetic characters `A' through `F' and `a' to `f' as digits. It continues to scan until it encounters a nondigit. The tail continues from the end of the subject sequence to the null character that ends the string. strtoul() ignores the beginning portion of the string. It converts the subject sequence to an unsigned long. Finally, if tailptr does not equal NULL , it sets the pointer pointed to by tailptr to the address of the first character of the string's tail. strtoul() returns an unsigned long representing the value of the subject sequence. If the input string does not specify a valid number, it returns zero and stores the initial value of string through tailptr. If the number it builds is too large to fit into an unsigned long, it sets the global variable errno to the value of the macro ERANGE and returns ULONG_MAX. Example This example uses strtoul() as a hash function for table lookup. It demonstrates both hashing and linked lists. Hash-table lookup is the most efficient when used to look up entries in large tables; this is an example only. #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <string.h> /* * For fastest results, use a prime about 15% bigger * than the table. If short of space, use a smaller prime. */ #define HASHP 11 struct symbol { struct symbol *next; char *name; char *descr; } *hasht[HASHP], codes[] = { NULL, "a286", "frogs togs", NULL, "xy7800", "doughnut holes", NULL, "z678abc", "used bits", NULL, "xj781", "black-hole varnish", NULL, "h778a", "table hash", NULL, "q167", "log(-5.2)", NULL, "18888", "quid pro quo", NULL, NULL, NULL /* end marker */ }; void buildTable() { long h; register struct symbol *sym, **symp; for(symp = hasht; symp != (hasht + HASHP); symp++) *symp = NULL; for(sym = codes; sym->descr != NULL; sym++) { /* * hash by converting to base 36. There are * many ways to hash, but use all the data. */ h = strtoul(sym->name, NULL, 36) % HASHP; sym->next = hasht[h]; hasht[h] = sym; } } struct symbol * lookup(s) char *s; { long h; register struct symbol *sym; h = strtoul(s, NULL, 36) % HASHP; for(sym = hasht[h]; sym != NULL; sym = sym->next) if(!strcmp(sym->name, s)) return(sym); return(NULL); } main() { char buf[80]; struct symbol *sym; buildTable(); for(;;) { printf("Enter name "); fflush(stdout); if(gets(buf) == NULL) exit(EXIT_SUCCESS); if((sym = lookup(buf)) == NULL) printf("%s not found\n", buf); else printf("%s is %s\n", buf, sym->descr); } } See Also errno, libc, limits.h, stdlib.h, strtol() ANSI Standard, §7.10.1.6 Notes strtoul() ignores initial white space in the input string. White space is defined as being all characters so recognized by the function isspace().