以下是一个较为复杂的 C 语言代码示例,展示了如何使用指针和动态内存分配来实现一个简单的字符串操作库:
代码语言:javascript复制#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 自定义字符串结构体
typedef struct {
char* str;
int length;
} MyString;
// 创建字符串
MyString* createString(const char* source) {
MyString* string = malloc(sizeof(MyString));
string->length = strlen(source);
string->str = malloc((string->length 1) * sizeof(char));
strcpy(string->str, source);
return string;
}
// 字符串连接
MyString* concatenateString(const MyString* str1, const MyString* str2) {
MyString* result = malloc(sizeof(MyString));
result->length = str1->length str2->length;
result->str = malloc((result->length 1) * sizeof(char));
strcpy(result->str, str1->str);
strcat(result->str, str2->str);
return result;
}
// 字符串复制
void copyString(MyString* dest, const MyString* src) {
dest->length = src->length;
dest->str = realloc(dest->str, (dest->length 1) * sizeof(char));
strcpy(dest->str, src->str);
}
// 销毁字符串
void destroyString(MyString* string) {
free(string->str);
free(string);
}
int main() {
MyString* str1 = createString("Hello");
MyString* str2 = createString("World!");
MyString* concatenated = concatenateString(str1, str2);
printf("连接后的字符串为: %sn", concatenated->str);
MyString* copied = malloc(sizeof(MyString));
copyString(copied, concatenated);
printf("复制后的字符串为: %sn", copied->str);
destroyString(str1);
destroyString(str2);
destroyString(concatenated);
destroyString(copied);
return 0;
}
上述代码中,我们定义了一个自定义字符串结构体 MyString
,它包含一个字符指针 str
来存储字符串内容,以及一个整型变量 length
来记录字符串的长度。我们实现了以下几个字符串操作函数:
createString
:用于创建一个新的字符串对象,并将字符串内容复制到动态分配的内存中。concatenateString
:用于将两个字符串连接起来,并返回一个新的字符串对象。copyString
:用于将一个字符串复制到另一个字符串对象中。destroyString
:用于销毁字符串对象,并释放相关的内存。
在 main
函数中,我们创建了两个字符串对象 str1
和 str2
,对它们进行了连接和复制操作,并打印了结果。最后,我们释放了所分配的内存,避免内存泄漏。
请注意,这只是一个相对复杂的示例代码,演示了如何使用指针和动态内存分配来操作字符串。在实际编写代码时,应根据具体需求选择合适的字符串处理库或者使用已有的标准库函数来处理字符串。