What function in C is commonly used to convert a string to an integer?
The atoi() function converts a string to an integer. It reads the string until it finds a non-numeric character.
Click to reveal answer
intermediate
What is the difference between atoi() and strtol()?
atoi() converts a string to an int but does not handle errors well. strtol() converts to long int and provides error checking by using an end pointer and errno.
Click to reveal answer
intermediate
How can you check if a numeric argument is valid when parsing a string in C?
Use strtol() with an end pointer. If the end pointer points to the string's end, the whole string was a valid number. Also check errno for overflow or underflow.
Click to reveal answer
beginner
What header file must be included to use strtol()?
Include <stdlib.h> to use strtol().
Click to reveal answer
intermediate
Why is it important to check the base parameter in strtol()?
The base parameter tells strtol() which number system to use (e.g., 10 for decimal, 16 for hex). Using the wrong base can cause incorrect parsing.
Click to reveal answer
Which function converts a string to a long integer and allows error checking?
Astrtol()
Batoi()
Csprintf()
Dstrlen()
✗ Incorrect
strtol() converts strings to long integers and provides error checking via an end pointer and errno.
What does atoi() return if the string does not start with a number?
AThe first character
B-1
CAn error code
D0
✗ Incorrect
atoi() returns 0 if the string does not start with a valid number.
Which header file is required to use strtol()?
A<stdio.h>
B<stdlib.h>
C<string.h>
D<math.h>
✗ Incorrect
strtol() is declared in <stdlib.h>.
What does the 'endptr' argument in strtol() help you determine?
AWhere the number parsing stopped
BThe base of the number
CThe length of the string
DThe maximum value parsed
✗ Incorrect
The 'endptr' points to the character after the last parsed digit, helping detect invalid characters.
If you want to parse a hexadecimal number string, what base should you pass to strtol()?
A8
B10
C16
D2
✗ Incorrect
Use base 16 to parse hexadecimal numbers.
Explain how to safely parse a numeric argument from a string in C.
Think about how to detect invalid input and overflow.
You got /4 concepts.
Describe the limitations of using atoi() for parsing numbers.
Consider what happens if the input is not a number.
You got /4 concepts.
Practice
(1/5)
1. What does the atoi function do in C when parsing numeric arguments?
easy
A. Converts a string to an integer without error checking
B. Converts a string to a floating-point number
C. Checks if a string contains only digits
D. Parses a string and returns a pointer to the next character
Solution
Step 1: Understand atoi function purpose
atoi converts a string to an integer but does not check for errors or invalid input.
Step 2: Compare with other parsing functions
Unlike strtol, atoi does not provide error detection or pointer to next character.
Final Answer:
Converts a string to an integer without error checking -> Option A
Quick Check:
atoi = simple integer conversion [OK]
Hint: Remember: atoi converts but doesn't check errors [OK]
Common Mistakes:
Thinking atoi checks for invalid input
Confusing atoi with strtol
Assuming atoi returns pointer to next char
2. Which of the following is the correct syntax to parse a string "1234" to an integer using strtol in C?
easy
A. int num = strtol("1234", NULL, 10);
B. long num = strtol("1234", NULL, 10);
C. long num = atoi("1234", NULL, 10);
D. int num = strtol("1234", 10, NULL);
Solution
Step 1: Check strtol return type
strtol returns a long, so the variable must be long.
Step 2: Verify argument order
Arguments are: string, pointer to char* for end, and base (10 for decimal). So strtol("1234", NULL, 10) is correct.
Final Answer:
long num = strtol("1234", NULL, 10); -> Option B
Quick Check:
strtol returns long, args: string, endptr, base [OK]
Hint: Remember strtol returns long, not int [OK]
Common Mistakes:
Using int instead of long for strtol result
Mixing argument order in strtol
Using atoi syntax with strtol
3. What will be the output of this C code snippet?
#include
#include
int main() {
char *str = "42abc";
char *endptr;
long val = strtol(str, &endptr, 10);
printf("%ld %s\n", val, endptr);
return 0;
}
medium
A. Error
B. 0 42abc
C. 42abc (null)
D. 42 abc
Solution
Step 1: Understand strtol parsing behavior
strtol converts initial numeric part "42" to long and sets endptr to point after parsed number, which is "abc".
Step 2: Analyze printf output
It prints the number 42 and then the string starting at endptr, which is "abc".
Final Answer:
42 abc -> Option D
Quick Check:
Parsed number + leftover string = 42 abc [OK]
Hint: Check where endptr points after strtol [OK]
Common Mistakes:
Assuming strtol parses entire string
Ignoring endptr usage
Expecting error on non-digit suffix
4. Identify the error in this code snippet that parses a numeric argument:
#include
int main(int argc, char *argv[]) {
int num = atoi(argv[1]);
if (num == 0) {
printf("Invalid number\n");
}
return 0;
}
medium
A. Missing check if argc > 1 before accessing argv[1]
B. Using int instead of long for atoi result
C. atoi returns 0 for invalid input and valid zero, causing confusion
D. No error, code is correct
Solution
Step 1: Check argument count before access
The code uses argv[1] without verifying argc > 1, risking out-of-bounds access.
Step 2: Understand atoi zero ambiguity
While atoi returns 0 for invalid input and valid zero, the bigger issue is missing argument check causing runtime error.
Final Answer:
Missing check if argc > 1 before accessing argv[1] -> Option A
Quick Check:
Always check argc before argv access [OK]
Hint: Always check argc before argv usage [OK]
Common Mistakes:
Ignoring argc check leads to crashes
Confusing atoi zero return meaning
Assuming atoi handles errors
5. You want to safely parse a command-line argument as a positive integer in C. Which approach correctly handles invalid input and zero?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (argc <= 1) {
printf("No input provided\n");
return 1;
}
char *endptr;
long val = strtol(argv[1], &endptr, 10);
if (*endptr != '\0' || val <= 0) {
printf("Invalid positive integer\n");
return 1;
}
printf("Parsed value: %ld\n", val);
return 0;
}
hard
A. Fails to check if argv[1] is NULL before parsing
B. Does not handle negative numbers correctly
C. Correctly parses positive integers and rejects invalid or zero input
D. Should use atoi instead of strtol for safety
Solution
Step 1: Check argument count
The code checks if argc <= 1 to ensure input is provided.
Step 2: Use strtol with endptr to detect invalid characters and check if value is positive
It verifies *endptr == '\0' to confirm full string parsed and val > 0 to ensure positive integer.
Final Answer:
Correctly parses positive integers and rejects invalid or zero input -> Option C
Quick Check:
strtol + endptr + value check = safe parsing [OK]
Hint: Use strtol with endptr and check value > 0 [OK]
Common Mistakes:
Using atoi which can't detect invalid input
Not checking endptr for leftover chars
Ignoring zero or negative values
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.