notebook/notes/c/strings.md

22 KiB

title TARGET DECK FILE TAGS tags
Strings Obsidian::STEM c
c

Overview

A contiguous sequence of characters terminated by the NUL character (refer to ascii). Text data is said to be more platform-independent than endianness 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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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. Tags: printf

END%%

%%ANKI Basic Why is printf named the way it is? Back: It stands for print formatted. Reference: “Printf,” in Wikipedia, January 18, 2024, 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Tags: printf

END%%

%%ANKI Basic Given int64_t x, why is printf("%d", x) a problem? Back: %d matches an int which is not necessarily 64-bits. Tags: printf 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 must you use when invoking printf with a fixed-width integer type? Back: printf-specific macros. Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016. Tags: printf

END%%

%%ANKI Basic What is PRId32 an example macro for? Back: A macro that expands to the correct specifier for a 32-bit signed integral type. Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016. Tags: printf

END%%

%%ANKI Cloze {PRId32} is to signed whereas {PRIu32} is to unsigned. Reference: “Printf,” in Wikipedia, January 18, 2024, https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962. Tags: printf

END%%

%%ANKI Basic Which C header specifies printf macros for fixed-width integral types? Back: <inttypes.h> Reference: “Printf,” in Wikipedia, January 18, 2024, https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962. Tags: printf

END%%

%%ANKI Basic Given int32_t x, how might we invoke printf on it? Back: printf("%" PRId32, x) Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016. Tags: printf

END%%

%%ANKI Basic What prefix do printf macros from <inttypes.h> share? Back: PRI Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016. Tags: printf

END%%

References