#include <stdio.h>
#include <stdlib.h>
typedef struct {
char *data;
size_t length;
} String;
String *createString(const char *initValue) {
String *string = (String *)malloc(sizeof(String));
if (string == NULL) {
printf("Error: Unable to allocate memory for string\n");
return NULL;
}
size_t len = strlen(initValue);
string->data = (char *)malloc((len + 1) * sizeof(char));
if (string->data == NULL) {
printf("Error: Unable to allocate memory for string data\n");
free(string);
return NULL;
}
strcpy(string->data, initValue);
string->length = len;
return string;
}
void freeString(String *string) {
if (string == NULL) {
return;
}
if (string->data!= NULL) {
free(string->data);
}
free(string);
}
int main() {
String *myString = createString("Hello, World!");
printf("String: %s\n", myString->data);
printf("Length: %zu\n", myString->length);
freeString(myString);
return 0;
}
在上面的代码中,String
结构体由两个成员组成:data
和 length
。data
成员是一个指向字符数组的指针,用于存储字符串的内容;length
成员是一个 size_t
类型的变量,用于存储字符串的长度。createString
函数创建一个新的字符串,并使用 malloc
函数为 String
结构体和 data
成员指向的字符数组分配内存。freeString
函数用于释放 createString
函数分配的内存。 请注意,使用堆式顺序存储结构时,你需要手动管理内存的分配和释放,以确保没有内存泄漏和悬挂指针的问题