|
@ -3,6 +3,22 @@ |
|
|
#include <string.h> |
|
|
#include <string.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// summary ofstring placement |
|
|
|
|
|
/* |
|
|
|
|
|
char *globalHeader = "Chapter"; |
|
|
|
|
|
char globalArrayHeader[] = "Chapter"; |
|
|
|
|
|
|
|
|
|
|
|
void displayHeader() { |
|
|
|
|
|
static char *staticHeader = "Chapter"; |
|
|
|
|
|
char *localHeader = "Chapter"; |
|
|
|
|
|
static char staticArrayHeader[] = "Chapter"; |
|
|
|
|
|
char localArrayHeader[] = "Chapter"; |
|
|
|
|
|
char *heapHeader = malloc(strlen("Chapter")+1); |
|
|
|
|
|
strcpy(heapHeader, "Chapter"); |
|
|
|
|
|
} |
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int main(void) { |
|
|
int main(void) { |
|
|
|
|
|
|
|
|
// print size of char & character literal |
|
|
// print size of char & character literal |
|
@ -51,6 +67,56 @@ int main(void) { |
|
|
} |
|
|
} |
|
|
printf("\n"); |
|
|
printf("\n"); |
|
|
|
|
|
|
|
|
|
|
|
// direct init with character pointer |
|
|
|
|
|
// don't create a new copy, instead a reference to string literal pool only |
|
|
|
|
|
char *headerRef = "Media Player"; |
|
|
|
|
|
printf("%s\n", headerRef); |
|
|
|
|
|
|
|
|
|
|
|
// you shouldn't assign a char pointer with a character literal |
|
|
|
|
|
// because character literals is of type int |
|
|
|
|
|
// wrong: |
|
|
|
|
|
// char *prefix = '+'; |
|
|
|
|
|
// better: |
|
|
|
|
|
char *prefix = malloc(2); |
|
|
|
|
|
*prefix = '+'; |
|
|
|
|
|
*(prefix + 1) = 0; |
|
|
|
|
|
printf("%s\n", prefix); |
|
|
|
|
|
free(prefix); |
|
|
|
|
|
|
|
|
|
|
|
// string initialisation from standard in |
|
|
|
|
|
// don't forget to allocate memory before read from standard in |
|
|
|
|
|
// wrong: |
|
|
|
|
|
// char *command; |
|
|
|
|
|
// printf("%s: ", "Enter a command"); |
|
|
|
|
|
// scanf("%s", command); |
|
|
|
|
|
// better: |
|
|
|
|
|
char *command = malloc(11); |
|
|
|
|
|
printf("%s: ", "Enter a command"); |
|
|
|
|
|
scanf("%10s", command); |
|
|
|
|
|
printf("You entered: %s with length: %zu\n", command, strlen(command)); |
|
|
|
|
|
free(command); |
|
|
|
|
|
|
|
|
|
|
|
// memset buffer overflow test |
|
|
|
|
|
// executes without warnings or errors on osx :D |
|
|
|
|
|
char *mem = malloc(11); |
|
|
|
|
|
memset(mem, 0x42, 64); |
|
|
|
|
|
free(mem); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// standard string operations |
|
|
|
|
|
|
|
|
|
|
|
// comparing strings |
|
|
|
|
|
{ |
|
|
|
|
|
char command[16]; |
|
|
|
|
|
printf("Enter a command: "); |
|
|
|
|
|
scanf("%15s", command); |
|
|
|
|
|
// return value of strlen == 0 -> strings are equal |
|
|
|
|
|
if (!strcmp(command, "quit")) { |
|
|
|
|
|
printf("The command was quit\n"); |
|
|
|
|
|
} else { |
|
|
|
|
|
printf("The command wasn't quit\n"); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return 0; |
|
|
return 0; |
|
|