solution_11_1_dynamic_strings.c
C Programming Language/solutions/advanced/week11/solution_11_1_dynamic_strings.c
/**
* Solution 11.1: Dynamic String Manipulation
* Week 11 - Dynamic Memory Management
*
* Description: Dynamic string manipulation
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* createString(const char* initial) {
if (initial == NULL) {
return NULL;
}
int len = strlen(initial);
char* str = (char*)malloc((len + 1) * sizeof(char));
if (str != NULL) {
strcpy(str, initial);
}
return str;
}
char* concatenateStrings(const char* str1, const char* str2) {
if (str1 == NULL || str2 == NULL) {
return NULL;
}
int len1 = strlen(str1);
int len2 = strlen(str2);
char* result = (char*)malloc((len1 + len2 + 1) * sizeof(char));
if (result != NULL) {
strcpy(result, str1);
strcat(result, str2);
}
return result;
}
char* resizeString(char* str, int newSize) {
if (str == NULL || newSize <= 0) {
return NULL;
}
char* newStr = (char*)realloc(str, newSize * sizeof(char));
return newStr;
}
int main() {
char* str1 = createString("Hello");
char* str2 = createString(" World");
if (str1 == NULL || str2 == NULL) {
printf("Memory allocation failed!\n");
return 1;
}
printf("String 1: %s\n", str1);
printf("String 2: %s\n", str2);
char* combined = concatenateStrings(str1, str2);
if (combined != NULL) {
printf("Combined: %s\n", combined);
}
// Resize string to accommodate more text
str1 = resizeString(str1, 100);
if (str1 != NULL) {
strcat(str1, " from C!");
printf("Extended string 1: %s\n", str1);
}
// Free allocated memory
free(str1);
free(str2);
free(combined);
printf("Memory freed successfully!\n");
return 0;
}
Articles liés
bitwise_operations_advanced.c
bitwise_operations_advanced.c — c source code from the C Programming Language learning materials (C Programming Language/additional/advanced_topics/bitwise_operations_advanced.c).
Lire l'article →huffman_coding_complete.c
huffman_coding_complete.c — c source code from the C Programming Language learning materials (C Programming Language/additional/advanced_topics/huffman_coding_complete.c).
Lire l'article →recursion_advanced.c
recursion_advanced.c — c source code from the C Programming Language learning materials (C Programming Language/additional/algorithms/recursion_advanced.c).
Lire l'article →sorting_algorithms_complete.c
sorting_algorithms_complete.c — c source code from the C Programming Language learning materials (C Programming Language/additional/algorithms/sorting_algorithms_complete.c).
Lire l'article →binary_trees_complete.c
binary_trees_complete.c — c source code from the C Programming Language learning materials (C Programming Language/additional/data_structures/binary_trees_complete.c).
Lire l'article →linked_lists_complete.c
linked_lists_complete.c — c source code from the C Programming Language learning materials (C Programming Language/additional/data_structures/linked_lists_complete.c).
Lire l'article →