c - C 中的结构实际上如何与 malloc 一起工作
问题描述
我正在尝试创建一个包含结构的程序,例如“myStruct”,其中包含字符串数组“char* 数组”。然后是一个分配内存然后打印输出的函数,然后是一个如下所示的 main 函数:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct myStruct { char *array; } str1;
void display(str1 *p1) {
char *array;
array = (char *)malloc(10 * sizeof(char));
printf("%s", p1->array);
free(array);
}
int main(void) {
str1 s1;
strcpy(s1.array, "Damn");
return 0;
}
但是我希望“该死”作为输出,但我没有得到任何输出。但是在编译期间,显示以下警告:
user@localhost: ~ $ clang struct.c -Weverything
struct.c:7:6: warning: no previous prototype for function 'display' [-Wmissing-prototypes]
void display(str1 *p1) {
^
1 warning generated.
这意味着函数没有被调用。在这种情况下,我需要一些语法和语义上的帮助。我不确定如何调用函数 display()。
解决方案
你没有打电话display
。main()
要分配内存char *array
并复制字符串,您可以设计如下函数:
#define DEFAULT_LEN 10
void allocate(str1 *p1, const char * str) {
char * array;
if(str) {
//(char *) is omittable in C (not C++)
array = malloc(strlen(str) + 1);
strcpy(array, str);
}
else {
array = malloc(DEFAULT_LEN);
array[0] = 0;
}
p1->array = array;
}
你可以像这样打印文本:
int main() {
str1 s1; allocate(&s1, "Damn");
puts(s1.array);
deallocate(&s1);
return 0;
}
你必须释放内存:
void deallocate(str1 *p1) {
free(p1->array);
p1->array = NULL;
}
推荐阅读
- python - 如何获取自定义异常的参数以在消息中使用它?
- php - 未使用 PHP setcookie 函数设置 Cookie
- powershell - 如何获取共享文件夹中的剩余存储空间
- macros - 本地“宏”中未知的参数类型
- scala - 创建源时将 Future[Done] 指定为物化值
- php - Facebook SDK 以 JFIF 形式返回个人资料图片,如何在 PHP 中转换为 JPG/PNG?
- android - 有没有办法正确模拟房间数据库?
- bash - Bash Script 单引号内的双引号内的单引号内
- r - 如何过滤掉在不同(未指定)列中包含两个特定字符串的行?
- python - 如何使用大量 NaN 对日期时间进行分组