我需要编写一个程序,其中包含两个字段的结构:整数和字符串。接下来我需要编写一个动态分配这个结构的函数,并将int和string作为参数传递给分配的结构。此函数还将返回指向新建结构的指针。该程序的第二个元素应该是将struct指针作为参数的函数,然后在屏幕上打印所有文件,然后释放struct的内存。这是我能想到的最好的。
#include <stdio.h>
#include <stdlib.h>
struct str{
int num;
char text[20];
};
struct str* return_address(int *num, char *text){
struct str* new_struct=malloc(sizeof(struct str));
new_struct->num=num;
new_struct->text[20]=text;
return new_struct;
};
void release(struct str* s_pointer){
printf("%d %s", s_pointer->num, s_pointer->text);
free(s_pointer);
};
int main()
{
struct str* variable=return_address(1234, "sample text");
release(variable);
return 0;
}
答案 0 :(得分:0)
malloc()
进行分配,为什么不动态分配所有内容?num
成员用于存储“字符串”的长度,正被分配一个指针,这不是你想要的。而且,只有在指定整数的指针时才会在非常特殊的情况下定义行为,除非您关闭警告,否则编译器应该警告您。也许你想要这个,
struct string {
char *data;
int length;
};
struct string *
allocate_string(int length, const char *const source)
{
struct string *string;
string = malloc(sizeof *string);
if (string == NULL)
return NULL;
string->length = strlen(source);
// Make an internal copy of the original
// input string
string->data = malloc(string->length + 1);
if (string->data == NULL) {
free(string);
return NULL;
}
// Finally copy the data
memcpy(string->data, source, string->length + 1);
return string;
}
void
free_string(struct string *string)
{
if (string == NULL)
return;
free(string->data);
free(string);
}