CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations...
Transcript of CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations...
![Page 1: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/1.jpg)
1This document is copyright (C) Stanford Computer Science and Nick Troccoli, licensed under Creative Commons Attribution 2.5 License. All rights reserved.
Based on slides created by Marty Stepp, Cynthia Lee, Chris Gregg, Lisa Yan, Jerry Cain and others.
CS107, Lecture 4C Strings
Reading: K&R (1.9, 5.5, Appendix B3) or Essential C section 3
![Page 2: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/2.jpg)
2
CS107 Topic 2: How can a computer represent and
manipulate more complex data like text?
![Page 3: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/3.jpg)
3
Lecture Plan• Characters• Strings• Common String Operations
• Comparing• Copying• Concatenating• Substrings
• Practice: Diamond
![Page 4: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/4.jpg)
4
Lecture Plan• Characters• Strings• Common String Operations
• Comparing• Copying• Concatenating• Substrings
• Practice: Diamond
![Page 5: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/5.jpg)
5
CharA char is a variable type that represents a single character or “glyph”.
char letterA = 'A';char plus = '+';char zero = '0';char space = ' ';char newLine = '\n';char tab = '\t';char singleQuote = '\'';char backSlash = '\\';
![Page 6: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/6.jpg)
6
ASCIIUnder the hood, C represents each char as an integer (its “ASCII value”).
• Uppercase letters are sequentially numbered• Lowercase letters are sequentially numbered• Digits are sequentially numbered• Lowercase letters are 32 more than their uppercase equivalents (bit flip!)
char uppercaseA = 'A'; // Actually 65char lowercaseA = 'a'; // Actually 97char zeroDigit = '0’; // Actually 48
![Page 7: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/7.jpg)
7
ASCIIWe can take advantage of C representing each char as an integer:
bool areEqual = 'A' == 'A'; // truebool earlierLetter = 'f' < 'c'; // falsechar uppercaseB = 'A' + 1;int diff = 'c' - 'a'; // 2int numLettersInAlphabet = 'z' – 'a' + 1;// orint numLettersInAlphabet = 'Z' – 'A' + 1;
![Page 8: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/8.jpg)
8
ASCIIWe can take advantage of C representing each char as an integer:
// prints out every lowercase characterfor (char ch = 'a'; ch <= 'z'; ch++) {
printf("%c", ch);}
![Page 9: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/9.jpg)
9
Common ctype.h FunctionsFunction Description
isalpha(ch) true if ch is 'a' through 'z' or 'A' through 'Z'
islower(ch) true if ch is 'a' through 'z'
isupper(ch) true if ch is 'A' through 'Z'
isspace(ch) true if ch is a space, tab, new line, etc.
isdigit(ch) true if ch is '0' through '9'
toupper(ch) returns uppercase equivalent of a letter
tolower(ch) returns lowercase equivalent of a letter
Remember: these return a char; they cannot modify an existing char!More documentation with man isalpha, man tolower
![Page 10: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/10.jpg)
10
Common ctype.h Functionsbool isLetter = isalpha('A'); // truebool capital = isupper('f'); // falsechar uppercaseB = toupper('b');bool isADigit = isdigit('4'); // true
![Page 11: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/11.jpg)
11
Lecture Plan• Characters• Strings• Common String Operations
• Comparing• Copying• Concatenating• Substrings
• Practice: Diamond
![Page 12: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/12.jpg)
12
C StringsC has no dedicated variable type for strings. Instead, a string is represented as an array of characters with a special ending sentinel value.
'\0' is the null-terminating character; you always need to allocate one extra space in an array for it.
"Hello"index 0 1 2 3 4 5
char 'H' 'e' 'l' 'l' 'o' '\0'
![Page 13: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/13.jpg)
13
String LengthStrings are not objects. They do not embed additional information (e.g., string length). We must calculate this!
We can use the provided strlen function to calculate string length. The null-terminating character does not count towards the length.
int length = strlen(myStr); // e.g. 13
index 0 1 2 3 4 5 6 7 8 9 10 11 12 13
value 'H' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
Caution: strlen is O(N) because it must scan the entire string! We should save the value if we plan to refer to the length later.
![Page 14: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/14.jpg)
14
C Strings As ParametersWhen we pass a string as a parameter, it is passed as a char *. C passes the location of the first character rather than a copy of the whole array.int doSomething(char *str) {
...}
char myString[6];...doSomething(myString);
![Page 15: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/15.jpg)
15
C Strings As ParametersWhen we pass a string as a parameter, it is passed as a char *. C passes the location of the first character rather than a copy of the whole array.int doSomething(char *str) {
...str[0] = 'c'; // modifies original string!printf("%s\n", str); // prints cello
}
char myString[6];... // e.g. this string is “Hello”doSomething(myString);
We can still use a char * the same way as a char[].
![Page 16: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/16.jpg)
16
Lecture Plan• Characters• Strings• Common String Operations
• Comparing• Copying• Concatenating• Substrings
• Practice: Diamond
![Page 17: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/17.jpg)
17
Common string.h FunctionsFunction Description
strlen(str) returns the # of chars in a C string (before null-terminating character).
strcmp(str1, str2), strncmp(str1, str2, n)
compares two strings; returns 0 if identical, <0 if str1 comes before str2 in alphabet, >0 if str1 comes after str2 in alphabet. strncmpstops comparing after at most n characters.
strchr(str, ch)strrchr(str, ch)
character search: returns a pointer to the first occurrence of ch in str, or NULL if ch was not found in str. strrchr find the last occurrence.
strstr(haystack, needle) string search: returns a pointer to the start of the first occurrence of needle in haystack, or NULL if needle was not found in haystack.
strcpy(dst, src),strncpy(dst, src, n)
copies characters in src to dst, including null-terminating character. Assumes enough space in dst. Strings must not overlap. strncpystops after at most n chars, and does not add null-terminating char.
strcat(dst, src),strncat(dst, src, n)
concatenate src onto the end of dst. strncat stops concatenating after at most n characters. Always adds a null-terminating character.
strspn(str, accept),strcspn(str, reject)
strspn returns the length of the initial part of str which contains onlycharacters in accept. strcspn returns the length of the initial part of str which does not contain any characters in reject.
![Page 18: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/18.jpg)
18
Common string.h FunctionsFunction Description
strlen(str) returns the # of chars in a C string (before null-terminating character).
strcmp(str1, str2), strncmp(str1, str2, n)
compares two strings; returns 0 if identical, <0 if str1 comes before str2 in alphabet, >0 if str1 comes after str2 in alphabet. strncmpstops comparing after at most n characters.
strchr(str, ch)strrchr(str, ch)
character search: returns a pointer to the first occurrence of ch in str, or NULL if ch was not found in str. strrchr find the last occurrence.
strstr(haystack, needle) string search: returns a pointer to the start of the first occurrence of needle in haystack, or NULL if needle was not found in haystack.
strcpy(dst, src),strncpy(dst, src, n)
copies characters in src to dst, including null-terminating character. Assumes enough space in dst. Strings must not overlap. strncpystops after at most n chars, and does not add null-terminating char.
strcat(dst, src),strncat(dst, src, n)
concatenate src onto the end of dst. strncat stops concatenating after at most n characters. Always adds a null-terminating character.
strspn(str, accept),strcspn(str, reject)
strspn returns the length of the initial part of str which contains onlycharacters in accept. strcspn returns the length of the initial part of str which does not contain any characters in reject.
Many string functions assume valid string input; i.e., ends in a null terminator.
![Page 19: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/19.jpg)
19
Comparing StringsWe cannot compare C strings using comparison operators like ==, < or >. This compares addresses!
// e.g. str1 = 0x7f42, str2 = 0x654dvoid doSomething(char *str1, char *str2) {
if (str1 > str2) { … // compares 0x7f42 > 0x654d!Instead, use strcmp.
![Page 20: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/20.jpg)
20
The string library: strcmpstrcmp(str1, str2): compares two strings.• returns 0 if identical• <0 if str1 comes before str2 in alphabet• >0 if str1 comes after str2 in alphabet.
int compResult = strcmp(str1, str2);if (compResult == 0) {
// equal} else if (compResult < 0) {
// str1 comes before str2 } else {
// str1 comes after str2}
![Page 21: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/21.jpg)
21
Copying StringsWe cannot copy C strings using =. This copies addresses!
// e.g. param1 = 0x7f42, param2 = 0x654dvoid doSomething(char *param1, char *param2) {
param1 = param2; // copies 0x654d. Points to same string!param2[0] = 'H'; // modifies the one original string!
Instead, use strcpy.
![Page 22: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/22.jpg)
22
The string library: strcpystrcpy(dst, src): copies the contents of src into the string dst, including the null terminator.
char str1[6];strcpy(str1, "hello");
char str2[6];strcpy(str2, str1);str2[0] = 'c';
printf("%s", str1); // helloprintf("%s", str2); // cello
![Page 23: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/23.jpg)
23
Copying Strings - strcpychar str1[6];strcpy(str1, "hello");
char str2[6];strcpy(str2, str1);
str1
0 1 2 3 4 5
'h' 'e' 'l' 'l' 'o' '\0'str2
0 1 2 3 4 5
'h' 'e' 'l' 'l' 'o' '\0'
? ? ? ? ? ?
![Page 24: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/24.jpg)
24
Copying Strings - strcpyWe must make sure there is enough space in the destination to hold the entire copy, including the null-terminating character.
char str2[6]; // not enough space!strcpy(str2, "hello, world!"); // overwrites other memory!
Writing past memory bounds is called a “buffer overflow”. It can allow for security vulnerabilities!
![Page 25: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/25.jpg)
25
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
? ? ? ? ? ?str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
- other program memory -
![Page 26: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/26.jpg)
26
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' ? ? ? ? ?str2 - other program memory -
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 27: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/27.jpg)
27
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' 'e' ? ? ? ?str2 - other program memory -
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 28: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/28.jpg)
28
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' 'e' 'l' ? ? ?str2 - other program memory -
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 29: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/29.jpg)
29
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' 'e' 'l' 'l' ? ?str2 - other program memory -
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 30: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/30.jpg)
30
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' 'e' 'l' 'l' 'o' ?str2 - other program memory -
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 31: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/31.jpg)
31
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' 'e' 'l' 'l' 'o' ','str2 - other program memory -
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 32: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/32.jpg)
32
- other program memory -' '
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' 'e' 'l' 'l' 'o' ','str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 33: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/33.jpg)
33
- other program memory -' ' 'w'
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' 'e' 'l' 'l' 'o' ','str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 34: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/34.jpg)
34
- other program memory -' ' 'w' 'o'
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' 'e' 'l' 'l' 'o' ','str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 35: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/35.jpg)
35
- other program memory -' ' 'w' 'o' 'r'
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' 'e' 'l' 'l' 'o' ','str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 36: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/36.jpg)
36
- other program memory -' ' 'w' 'o' 'r' 'l'
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' 'e' 'l' 'l' 'o' ','str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 37: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/37.jpg)
37
- other program memory -' ' 'w' 'o' 'r' 'l' 'd'
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' 'e' 'l' 'l' 'o' ','str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 38: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/38.jpg)
38
- other program memory -' ' 'w' 'o' 'r' 'l' 'd' '!'
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' 'e' 'l' 'l' 'o' ','str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 39: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/39.jpg)
39
- other program memory -' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' 'e' 'l' 'l' 'o' ','str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 40: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/40.jpg)
40
- other program memory -' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
Copying Strings – Buffer Overflowschar str1[14];strcpy(str1, "hello, world!");char str2[6];strcpy(str2, str1); // not enough space - overwrites other memory!
str1
0 1 2 3 4 5
'h' 'e' 'l' 'l' 'o' ','str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 41: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/41.jpg)
41
Copying Strings - strncpystrncpy(dst, src, n): copies at most the first n bytes from src into the string dst. If there is no null-terminating character in these bytes, then dst will not be null terminated!
// copying "hello"char str2[5];strncpy(str2, "hello, world!", 5); // doesn’t copy '\0'!
If there is no null-terminating character, we may not be able to tell where the end of the string is anymore. E.g. strlen may continue reading into some other memory in search of '\0'!
![Page 42: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/42.jpg)
42
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
0 1 2 3 4
? ? ? ? ?str2 - other program memory -
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 43: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/43.jpg)
43
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
0 1 2 3 4
'h' ? ? ? ?str2 - other program memory -
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 44: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/44.jpg)
44
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
0 1 2 3 4
'h' 'e' ? ? ?str2 - other program memory -
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 45: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/45.jpg)
45
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
0 1 2 3 4
'h' 'e' 'l' ? ?str2 - other program memory -
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 46: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/46.jpg)
46
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
0 1 2 3 4
'h' 'e' 'l' 'l' ?str2 - other program memory -
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 47: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/47.jpg)
47
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
0 1 2 3 4
'h' 'e' 'l' 'l' 'o'str2 - other program memory -
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 48: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/48.jpg)
48
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
0 1 2 3 4
'h' 'e' 'l' 'l' 'o'str2 - other program memory -
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 49: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/49.jpg)
49
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
0 1 2 3 4
'h' 'e' 'l' 'l' 'o' - other program memory -
![Page 50: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/50.jpg)
50
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
0 1 2 3 4
'h' 'e' 'l' 'l' 'o' - other program memory -
![Page 51: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/51.jpg)
51
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
0 1 2 3 4
'h' 'e' 'l' 'l' 'o' - other program memory -
![Page 52: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/52.jpg)
52
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
0 1 2 3 4
'h' 'e' 'l' 'l' 'o' - other program memory -
![Page 53: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/53.jpg)
53
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
0 1 2 3 4
'h' 'e' 'l' 'l' 'o' - other program memory -
![Page 54: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/54.jpg)
54
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
0 1 2 3 4
'h' 'e' 'l' 'l' 'o' - other program memory -
![Page 55: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/55.jpg)
55
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
0 1 2 3 4
'h' 'e' 'l' 'l' 'o' - other program memory -
![Page 56: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/56.jpg)
56
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
0 1 2 3 4
'h' 'e' 'l' 'l' 'o' - other program memory -
![Page 57: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/57.jpg)
57
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
0 1 2 3 4
'h' 'e' 'l' 'l' 'o' - other program memory -
![Page 58: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/58.jpg)
58
Copying Strings - strncpychar str2[5];strncpy(str2, "hello, world!", 5);int length = strlen(str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ',' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
0 1 2 3 4
'h' 'e' 'l' 'l' 'o' - other program memory -
![Page 59: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/59.jpg)
59
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
? ? ? ? ? ? ? ? ? ? ? ? ? ?
![Page 60: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/60.jpg)
60
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' ? ? ? ? ? ? ? ? ? ? ? ? ?
![Page 61: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/61.jpg)
61
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' ? ? ? ? ? ? ? ? ? ? ? ?
![Page 62: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/62.jpg)
62
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' ? ? ? ? ? ? ? ? ? ? ?
![Page 63: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/63.jpg)
63
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' ? ? ? ? ? ? ? ? ? ?
![Page 64: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/64.jpg)
64
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ? ? ? ? ? ? ? ? ?
![Page 65: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/65.jpg)
65
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ? ? ? ? ? ? ? ? ?
![Page 66: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/66.jpg)
66
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);printf("%s\n", str1);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ? ? ? ? ? ? ? ? ?
![Page 67: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/67.jpg)
67
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);printf("%s\n", str1);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ? ? ? ? ? ? ? ? ?
![Page 68: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/68.jpg)
68
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);printf("%s\n", str1);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ? ? ? ? ? ? ? ? ?
![Page 69: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/69.jpg)
69
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);printf("%s\n", str1);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ? ? ? ? ? ? ? ? ?
![Page 70: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/70.jpg)
70
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);printf("%s\n", str1);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ? ? ? ? ? ? ? ? ?
![Page 71: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/71.jpg)
71
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);printf("%s\n", str1);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ? ? ? ? ? ? ? ? ?
![Page 72: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/72.jpg)
72
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);printf("%s\n", str1);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ? ? ? ? ? ? ? ? ?
![Page 73: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/73.jpg)
73
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);printf("%s\n", str1);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ? ? ? ? ? ? ? ? ?
![Page 74: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/74.jpg)
74
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);printf("%s\n", str1);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ? ? ? ? ? ? ? ? ?
![Page 75: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/75.jpg)
75
Copying Strings - strncpychar str1[14];strncpy(str1, "hello there", 5);printf("%s\n", str1);
str1
0 1 2 3 4 5 6 7 8 9 10 11 12 13
'h' 'e' 'l' 'l' 'o' ? ? ? ? ? ? ? ? ?
hello⍰⍰J⍰⍰⍰
![Page 76: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/76.jpg)
76
Copying Strings - strncpyIf necessary, we can add a null-terminating character ourselves.
// copying "hello"char str2[6]; // room for string and '\0'strncpy(str2, "hello, world!", 5); // doesn’t copy '\0'!str2[5] = '\0'; // add null-terminating char
![Page 77: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/77.jpg)
77
String Copying ExerciseWhat value should go in the blank at right?A. 4B. 5C. 6D. 12E. strlen(“hello”) F. Something else
char str[______];strcpy(str, "hello");
![Page 78: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/78.jpg)
78
String ExerciseWhat is printed out by the following program?
int main(int argc, char *argv[]) {char str[9];strcpy(str, "Hi earth");str[2] = '\0';printf("str = %s, len = %lu\n",
str, strlen(str));return 0;
}
🤔
A. str = Hi, len = 8B. str = Hi, len = 2C. str = Hi earth, len = 8D. str = Hi earth, len = 2E. None/other
12345678
![Page 79: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/79.jpg)
79
Concatenating StringsWe cannot concatenate C strings using +. This adds addresses!
// e.g. param1 = 0x7f, param2 = 0x65void doSomething(char *param1, char *param2) {
printf("%s", param1 + param2); // adds 0x7f and 0x65!
Instead, use strcat.
![Page 80: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/80.jpg)
80
The string library: str(n)catstrcat(dst, src): concatenates the contents of src into the string dst.strncat(dst, src, n): same, but concats at most n bytes from src.
char str1[13]; // enough space for strings + '\0'strcpy(str1, "hello ");strcat(str1, "world!"); // removes old '\0', adds new '\0' at endprintf("%s", str1); // hello world!
Both strcat and strncat remove the old '\0' and add a new one at the end.
![Page 81: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/81.jpg)
81
Concatenating Stringschar str1[13];strcpy(str1, "hello ");char str2[7];strcpy(str2, "world!");
strcat(str1, str2);
str1
0 1 2 3 4 5 6
'w' 'o' 'r' 'l' 'd' '!' '\0'str2
0 1 2 3 4 5 6 7 8 9 10 11 12
'h' 'e' 'l' 'l' 'o' ' ' '\0' ? ? ? ? ? ?
![Page 82: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/82.jpg)
82
Concatenating Stringschar str1[13];strcpy(str1, "hello ");char str2[7];strcpy(str2, "world!");
strcat(str1, str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12
'h' 'e' 'l' 'l' 'o' ' ' 'w' ? ? ? ? ? ?
0 1 2 3 4 5 6
'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 83: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/83.jpg)
83
Concatenating Stringschar str1[13];strcpy(str1, "hello ");char str2[7];strcpy(str2, "world!");
strcat(str1, str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12
'h' 'e' 'l' 'l' 'o' ' ' 'w' 'o' ? ? ? ? ?
0 1 2 3 4 5 6
'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 84: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/84.jpg)
84
Concatenating Stringschar str1[13];strcpy(str1, "hello ");char str2[7];strcpy(str2, "world!");
strcat(str1, str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12
'h' 'e' 'l' 'l' 'o' ' ' 'w' 'o' 'r' ? ? ? ?
0 1 2 3 4 5 6
'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 85: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/85.jpg)
85
Concatenating Stringschar str1[13];strcpy(str1, "hello ");char str2[7];strcpy(str2, "world!");
strcat(str1, str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12
'h' 'e' 'l' 'l' 'o' ' ' 'w' 'o' 'r' 'l' ? ? ?
0 1 2 3 4 5 6
'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 86: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/86.jpg)
86
Concatenating Stringschar str1[13];strcpy(str1, "hello ");char str2[7];strcpy(str2, "world!");
strcat(str1, str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12
'h' 'e' 'l' 'l' 'o' ' ' 'w' 'o' 'r' 'l' 'd' ? ?
0 1 2 3 4 5 6
'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 87: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/87.jpg)
87
Concatenating Stringschar str1[13];strcpy(str1, "hello ");char str2[7];strcpy(str2, "world!");
strcat(str1, str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12
'h' 'e' 'l' 'l' 'o' ' ' 'w' 'o' 'r' 'l' 'd' '!' ?
0 1 2 3 4 5 6
'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 88: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/88.jpg)
88
Concatenating Stringschar str1[13];strcpy(str1, "hello ");char str2[7];strcpy(str2, "world!");
strcat(str1, str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12
'h' 'e' 'l' 'l' 'o' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
0 1 2 3 4 5 6
'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 89: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/89.jpg)
89
Concatenating Stringschar str1[13];strcpy(str1, "hello ");char str2[7];strcpy(str2, "world!");
strcat(str1, str2);
str1
str2
0 1 2 3 4 5 6 7 8 9 10 11 12
'h' 'e' 'l' 'l' 'o' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\0'
0 1 2 3 4 5 6
'w' 'o' 'r' 'l' 'd' '!' '\0'
![Page 90: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/90.jpg)
90
Substrings and char *You can also create a char * variable yourself that points to an address within in an existing string.
char myString[3]; myString[0] = 'H';myString[1] = 'i';myString[2] = '\0';
char *otherStr = myString; // points to 'H'
![Page 91: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/91.jpg)
91
Substringschar *s are pointers to characters. We can use them to create substrings of larger strings.
// Want just "car"char chars[8];strcpy(chars, "racecar");char *str1 = chars;
0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7 0xf8
'r' 'a' 'c' 'e' 'c' 'a' 'r' '\0'
str1
0xee
0xf1
chars
![Page 92: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/92.jpg)
92
SubstringsSince C strings are pointers to characters, we can adjust the pointer to omit characters at the beginning.
// Want just "car"char chars[8];strcpy(chars, "racecar");char *str1 = chars;char *str2 = chars + 4;
0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7 0xf8
'r' 'a' 'c' 'e' 'c' 'a' 'r' '\0'
str1
0xee
0xf1 str2
0xd2
0xf5
chars
![Page 93: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/93.jpg)
93
SubstringsSince C strings are pointers to characters, we can adjust the pointer to omit characters at the beginning.
char chars[8];strcpy(chars, "racecar");char *str1 = chars;char *str2 = chars + 4;printf("%s\n", str1); // racecarprintf("%s\n", str2); // car
0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7 0xf8
'r' 'a' 'c' 'e' 'c' 'a' 'r' '\0'
str1
0xee
0xf1 str2
0xd2
0xf5
chars
![Page 94: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/94.jpg)
94
SubstringsSince C strings are pointers to characters, we can adjust the pointer to omit characters at the beginning. NOTE: the pointer still refers to the same characters!
char chars[8];strcpy(chars, "racecar");char *str1 = chars;char *str2 = chars + 4;str2[0] = 'f';printf("%s %s\n", chars, str1);printf("%s\n", str2);
0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7 0xf8
'r' 'a' 'c' 'e' 'f' 'a' 'r' '\0'
str2
0xd2
0xf5
0xee
0xf1str1
chars
![Page 95: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/95.jpg)
95
SubstringsSince C strings are pointers to characters, we can adjust the pointer to omit characters at the beginning. NOTE: the pointer still refers to the same characters!
char chars[8];strcpy(chars, "racecar");char *str1 = chars;char *str2 = chars + 4;str2[0] = 'f';printf("%s %s\n", chars, str1); // racefar racefarprintf("%s\n", str2); // far
0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7 0xf8
'r' 'a' 'c' 'e' 'f' 'a' 'r' '\0'
str2
0xd2
0xf5
0xee
0xf1str1
chars
![Page 96: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/96.jpg)
96
char * vs. char[]char myString[]
vschar *myString
You can create char * pointers to point to any character in an existing string and reassign them since they are just pointer variables. You cannot reassign an array.
char myString[6];strcpy(myString, "Hello");myString = "Another string"; // not allowed!---char *myOtherString = myString;myOtherString = somethingElse; // ok
![Page 97: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/97.jpg)
97
SubstringsTo omit characters at the end, make a new string that is a partial copy of the original.
// Want just "race"char str1[8];strcpy(str1, "racecar");
char str2[5];strncpy(str2, str1, 4);str2[4] = '\0';printf("%s\n", str1); // racecarprintf("%s\n", str2); // race
![Page 98: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/98.jpg)
98
SubstringsWe can combine pointer arithmetic and copying to make any substrings we’d like.
// Want just "ace"char str1[8];strcpy(str1, "racecar");
char str2[4];strncpy(str2, str1 + 1, 3);str2[3] = '\0';printf("%s\n", str1); // racecarprintf("%s\n", str2); // ace
![Page 99: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/99.jpg)
99
Lecture Plan• Characters• Strings• Common String Operations
• Comparing• Copying• Concatenating• Substrings
• Practice: Diamond
![Page 100: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/100.jpg)
100
String Diamond• Write a function diamond that accepts a string parameter and prints its letters
in a "diamond" format as shown below.• For example, diamond("DAISY") should print:
DDADAIDAISDAISYAISYISYSYY
![Page 101: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/101.jpg)
101
String Diamond• Write a function diamond that accepts a string parameter and prints its letters
in a "diamond" format as shown below.• For example, diamond("DAISY") should print:
DDADAIDAISDAISYAISYISYSYY
![Page 102: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/102.jpg)
102
Daisy!
![Page 103: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/103.jpg)
103
Practice: Diamond
cp -r /afs/ir/class/cs107/lecture-code/lect4 .
![Page 104: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/104.jpg)
104
Recap• Characters• Strings• Common String Operations
• Comparing• Copying• Concatenating• Substrings
• Practice: Diamond
Next time: more strings
![Page 105: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/105.jpg)
105
Extra Practice
![Page 106: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/106.jpg)
106
char * vs. char[]• We’ll talk more about char * vs char[] in lecture 5• Some useful distinctions in the meantime:
• char * is an 8-byte pointer – it stores an address of a character• char[] is an array of characters – it stores the actual characters in a string• When you pass a char[] as a parameter, it is automatically passed as a char * (pointer to
its first character)
![Page 107: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/107.jpg)
107
String copying exercise
char buf[ 9 ];strcpy(buf, "Chadwick");printf("%s\n", buf);char *word = buf + 2;strncpy(word, "ris", 3);printf("%s\n", buf);
Line 1: What value should go in the blank?
Line 6: What is printed?
123456
🤔
A. 7B. 8C. 9
A. risickB. risdwickC. Chris
D. 12E. strlen("Chadwick")F. Something else
D. ChrisickE. Something elseF. Compile error
____
![Page 108: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/108.jpg)
108
String copying exercise
char buf[ 9 ];strcpy(buf, "Chadwick");printf("%s\n", buf);char *word = buf + 2;strncpy(word, "ris", 3);printf("%s\n", buf);
Line 1: What value should go in the blank?
Line 6: What is printed?
123456
🤔
A. 7B. 8C. 9
A. risickB. risdwickC. Chris
D. 12E. strlen("Chadwick")F. Something else
D. ChrisickE. Something elseF. Compile error
![Page 109: CS107, Lecture 4€¦ · Lecture Plan •Characters •Strings •Common String Operations •Comparing •Copying •Concatenating ... Under the hood, C represents each charas an](https://reader034.fdocuments.us/reader034/viewer/2022052002/6014bac17c9fd605037b066b/html5/thumbnails/109.jpg)
109
Practice: Copycat• How could we replace a call to strcat with a call to strcpy instead?• Challenge: implement our own mystrcat using other string functions.
// assume enough space in dststrcat(dst, src);
// same asstrcpy(dst + strlen(dst), src);