Command-Line Arguments
Challenge Gallery
Quick Reference
argc and argv:
// ./calculator 3 + 4
// argc = 4
// argv[0] = "./calculator"
// argv[1] = "3"
// argv[2] = "+"
// argv[3] = "4"
// argv[4] = NULL
Validation pattern:
int main(int argc, char *argv[])
{
if (argc != 3)
{
fprintf(stderr, "Usage: %s input.txt output.txt\n", argv[0]);
return 1;
}
// argv[1] and argv[2] are safe to access
}
String-to-number conversion:
| Function | Use | Error handling |
|---|---|---|
atoi(s) |
String → int | Returns 0 on failure (silent) |
atof(s) |
String → double | Returns 0.0 on failure (silent) |
strtol(s, &end, 10) |
String → long | Reports errors properly |
Java vs C:
| Java | C |
|---|---|
args[0] = first user arg |
argv[0] = program name |
args.length = user arg count |
argc = total count (including program name) |
Integer.parseInt(args[0]) |
atoi(argv[1]) |
Common Pitfalls
- Off-by-one from Java — Java’s
args[0]is the first user arg. C’sargv[0]is the program name. User args start atargv[1]. - Forgetting argc check — Accessing
argv[3]whenargcis 2 reads past the array. - Arguments are strings —
argv[1]is alwayschar *. Useatoi/atofto convert. - Shell glob expansion —
*expands to filenames. Quote or escape special characters. - atoi silent failure —
atoi("hello")returns 0 without error. Validate input if it matters.