Accessing arguments - Time & Space Complexity
When a program receives inputs through arguments, it often processes each one. Understanding how the time to handle these arguments grows helps us write efficient code.
We want to know: how does the work change as the number of arguments increases?
Analyze the time complexity of the following code snippet.
int main(int argc, char *argv[]) {
for (int i = 0; i < argc; i++) {
printf("Argument %d: %s\n", i, argv[i]);
}
return 0;
}
This code prints each argument passed to the program one by one.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through each argument to print it.
- How many times: Exactly once for each argument, from 0 up to argc - 1.
As the number of arguments increases, the program prints more lines, doing more work.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Print 10 lines |
| 100 | Print 100 lines |
| 1000 | Print 1000 lines |
Pattern observation: The work grows directly with the number of arguments; double the arguments, double the work.
Time Complexity: O(n)
This means the time to run grows in a straight line with the number of arguments.
[X] Wrong: "The program runs in constant time because it just prints arguments."
[OK] Correct: Printing happens once per argument, so more arguments mean more work, not the same amount.
Understanding how input size affects work is a key skill. It helps you explain your code clearly and shows you think about efficiency, which is valuable in any coding task.
"What if we changed the loop to print only every other argument? How would the time complexity change?"
Practice
What do argc and argv represent in a C program's main function?
Solution
Step 1: Understand
argcmeaningargcholds the number of command-line arguments passed, including the program name.Step 2: Understand
argvmeaningargvis an array of strings holding each argument, starting with the program name at index 0.Final Answer:
argcis the count of arguments;argvis an array of argument strings. -> Option AQuick Check:
argc= count,argv= array [OK]
- Confusing argc as the first argument value
- Thinking argv is a single string, not an array
- Assuming argc excludes the program name
Which of the following is the correct way to declare the main function to access command-line arguments in C?
Solution
Step 1: Check return type and parameters
The standard way isint main(int argc, char *argv[])where argc is int and argv is array of char pointers.Step 2: Identify incorrect declarations
Options A, B, and C have wrong types or missing return type.Final Answer:
int main(int argc, char *argv[]) -> Option DQuick Check:
Correct main signature uses int and char* array [OK]
- Using void as return type for main
- Declaring argv as char instead of char* array
- Omitting return type in main declaration
What will be the output of this program if run as ./prog apple banana?
int main(int argc, char *argv[]) {
printf("%d %s %s\n", argc, argv[0], argv[1]);
return 0;
}Solution
Step 1: Count arguments with argc
Running as./prog apple bananapasses 3 arguments: program name, apple, banana. So argc = 3.Step 2: Identify argv values
argv[0]is program name./prog,argv[1]isapple.Final Answer:
3 ./prog apple -> Option BQuick Check:
argc=3, argv[0]=./prog, argv[1]=apple [OK]
- Assuming argv[0] is first user argument
- Counting argc as number of user arguments only
- Mixing argv indexes and argc count
Identify the error in this program snippet that tries to print the second argument:
int main(int argc, char *argv[]) {
printf("%s\n", argv[2]);
return 0;
}Solution
Step 1: Check argv index usage
Accessingargv[2]means the third argument (program name is argv[0]).Step 2: Consider argument count safety
If fewer than 3 arguments are passed,argv[2]is invalid and causes runtime error.Final Answer:
Possible runtime error if less than 3 arguments are passed. -> Option CQuick Check:
Accessing argv beyond argc causes runtime error [OK]
- Ignoring argc check before argv access
- Confusing argv index with argument number
- Assuming argv[2] always exists
Write a program snippet that safely prints the first user argument if provided, or prints No argument otherwise.
int main(int argc, char *argv[]) {
// Your code here
return 0;
}Solution
Step 1: Check argument count safely
To print first user argument, ensureargc > 1becauseargv[0]is program name.Step 2: Print argument or fallback message
Ifargc > 1, printargv[1]; else print "No argument".Final Answer:
if (argc > 1) printf("%s\n", argv[1]); else printf("No argument\n"); -> Option AQuick Check:
Check argc > 1 before argv[1] access [OK]
- Not checking argc before accessing argv[1]
- Printing argv[0] instead of user argument
- Using wrong condition like argc == 1
Ready to prove it?
Pass the test and this pattern moves unknown
