notes/education/software development/ECE1400/Chapter 13 Exercises.md
2024-11-03 14:30:04 -07:00

2.1 KiB

1. The following function calls supposedly write a single new-line character, but some are incorrect. Identify which calls don't work and explain why.

b. printf("%c", "\n"); - This is invalid because the double quotes make \n a string, but it's being displayed with the %cformatting specifier. c. printf(%s, '\n'); - This is invalid because it's trying to display a char using the string formatting specifier. e. printf('\n'); - printf's first argument should be a string, not a char. h. putchar("\n"); - putchar's first argument should be a char, not a string. i. puts('\n'); - puts's first argument should be a string, not a char. j. puts("\n"); - puts will write a newline after writing a string, so this will write two newlines.


2. Suppose that p has been declared as follows:

char *p = "abc";

Which of the following function calls are legal? Show the output produced by each legal call, and explain why all the others are illegal.

// A - Not legal, because putchar accepts a `char`, not a pointer.
putchar(p);
// B - Legal, output: `a`
putchar(*p);
// C - Legal, output: `abc`
puts(p)
// D - Illegal, `puts` accepts a pointer to a null terminated string, not a `char`.

3. Suppose that we call scanf as follows:

scanf("%d%s%d", &i, s, &j);

If the user enters 12abc34 56def78, what will be the values of i, s, and j after the call? (Assume that i and j are int variables and s is an array of characters.)

  • i: 12
  • s: "abc34"
  • j: 56

7. Suppose that str is an array of three characters. Which one of the following statements is not equivalent to the other three?

// A
*str = 0;
// B
str[0] = '\0';
// C
strcpy(str, "");
// D
strcat(str, "");

(d) is different because it effectively does nothing (concatenates "abc" with an empty string). The rest of them make str effectively empty by setting the first character to a null byte.


9. What will be the value of the string s1 after the following statements have been executed?

strcpy(str, "tire-bouchon");
strcpy(&str[4], "d-or-wi")