--- title: Strings TARGET DECK: Obsidian::STEM FILE TAGS: c tags: - c --- ## Overview A contiguous sequence of characters terminated by the `NUL` character (refer to [[ascii|ASCII]]). Text data is said to be more platform-independent than [[endianness|binary]] data since it is unaffected by word size or byte ordering. %%ANKI Basic What is a C-style string? Back: A character array terminated with a `NUL` character. Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. END%% %%ANKI Basic What character terminates all C-style strings? Back: `NUL` Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. END%% %%ANKI Basic What is the decimal value of `NUL` in ASCII encoding? Back: `0` Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. END%% %%ANKI Basic Text is more platform-independent than binary because it is unaffected by what two properties? Back: Word size and byte ordering. Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. END%% ## `printf` The syntax for the format placeholder is `%[flags][width][.precision][length]specifier`. %%ANKI Basic Which header file contains `printf` functionality? Back: `stdio.h` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Cloze {1:`width`} field specifies a {2:minimum} number of characters while {2:`precision`} specifies a {1:maximum}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Cloze The {`width` and `precision`} fields are output related whereas the {`length`} field is input related. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% Flag | Description --------- | ----------- `-` | Left-aligns the output `+` | Prepends a plus for positive signed-numeric types `␣` | Prepends a space for positive signed-numeric types `0` | Prepends zeros for numeric types %%ANKI Cloze The {`-`} flag {left-aligns the output}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic What is the output of `printf("%-2d abc", 100)`? Back: `100 abc` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic What is the output of `printf("%-4d abc", 100)`? Back: `100 abc` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic What is the output of `printf("%.4d abc", 100)`? Back: `0100 abc` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic What is the output of `printf("%04d abc", 100)`? Back: `0100 abc` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic What is the output of `printf("%.4s abc", "efg")`? Back: `efg abc` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic What is the output of `printf("%.2s abc", "efg")`? Back: `ef abc` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic What is the output of `printf("%.2f abc", 0.01234)`? Back: `0.01 abc` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic How does the precision field affect `"%s"` parameters? Back: Strings are truncated if longer than the specified precision. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic How does the precision field affect `"%f"` parameters? Back: Decimal values are truncated if longer than the specified precision. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic What does a negative width field value indicate? Back: This is actually a positive width with a `-` (left-align) flag. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic The `-` flag overrides what default behavior? Back: Output is right-aligned by default. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Cloze The {`+`} flag {prepends a plus for positive signed-numeric types}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic The `+` flag overrides what default behavior? Back: Nothing is prepended to positive signed-numeric types by default. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Cloze The {`␣`} flag {prepends a space for positive signed-numeric types}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic The `␣` flag overrides what default behavior? Back: Nothing is prepended to positive signed-numeric types by default. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic How do the `+` and `␣` flags relate to one another? Back: Both prepend a character to positive signed-numeric types. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic What happens if both the `+` and `␣` flags are specified? Back: The `+` flag takes precedence. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Cloze The {`0`} flag {prepends zeros for numeric types}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic What option must be specified for the `0` flag to take effect? Back: The "width" option. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Basic The `0` flag overrides what default behavior? Back: Spaces are used to match the "width" option by default. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% Length | Description --------- | ----------- `hh` | `int` sized integer argument promoted from a `char` `h` | `int` sized integer argument promoted from a `short` `l` | `long` sized integer argument `ll` | `long long` sized integer argument `z` | `size_t` sized integer argument %%ANKI Basic *Why* do length modifiers for e.g. `char` exist? Back: For maximum portability in the face of default argument promotions. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Cloze The {`hh`} length corresponds to the {`char`} type declaration. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Cloze The {`h`} length corresponds to the {`short`} type declaration. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Cloze The {`l`} length corresponds to the {`long`} type declaration. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Cloze The {`ll`} length corresponds to the {`long long`} type declaration. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% %%ANKI Cloze The {`z`} length corresponds to the {`size_t`} type declaration. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). END%% Specifier | Description --------- | ----------- `d`, `i` | a decimal `signed int` `u` | a decimal `unsigned int` `x` | a hexadecimal `unsigned int` (lowercase) `X` | a hexadecimal `unsigned int` (uppercase) `o` | an octal `unsigned int` `s` | a `NUL`-terminated string `c` | a `char` character `p` | `void*` address in an implementation-defined format %%ANKI Basic What character do `printf` format specifiers start with? Back: `%` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Basic Why is `printf` named the way it is? Back: It stands for **print f**ormatted. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Cloze The {`%d` and `%i`} format specifers work on a {decimal `signed int`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Cloze {`%d` and `%i`} are to `signed` as {`%u`} is to `unsigned`. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Cloze The {`%u`} format specifier outputs a {decimal `unsigned int`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Basic What distinguishes format specifiers `%d` and `%i`? Back: Nothing. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Basic Which format specifiers were probably used to yield `printf` output `-12`? Back: `%d` or `%i` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Basic What distinguishes format specifiers `%d` and `%u`? Back: The former is for signed integers, the latter unsigned. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Cloze The {`%x`} format specifier outputs a {lowercase hexadecimal `unsigned int`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Basic Which format specifier were probably used to yield `printf` output `7af`? Back: `%x` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Cloze The {`%X`} format specifier outputs an {uppercase hexadecimal `unsigned int`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Basic Which format specifier were probably used to yield `printf` output `7AF`? Back: `%X` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Basic What distinguishes format specifiers `%x` and `%X`? Back: The former outputs lowercase hex digits, the latter uppercase. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Cloze The {`%o`} format specifier outputs an {octal `unsigned int`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Basic Why doesn't the `%o` format specifier have a corresponding `%O` specifier? Back: There is no distinction between lower and uppercase octal digits. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Cloze The {`%s`} format specifiers outputs a {`NUL`-terminated string}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Basic Which format specifier was probably used to yield `printf` output `abc`? Back: `%s` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Cloze The {`%c`} format specifier outputs a {`char` character}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Basic Which format specifier was probably used to yield `printf` output `a`? Back: `%c` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Cloze The {`%p`} format specifier outputs a {`void*` address}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Basic Which format specifier was probably used to yield `printf` output `0b80000000`? Back: `%p` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% %%ANKI Basic How is the address outputted by the `%p` format specifier written? Back: In an implementation-specific way. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). Tags: printf END%% ## References * Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. * “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962).