c - 使用 malloc 为用户输入分配内存
问题描述
我正在尝试为我构建的这个 C 程序动态分配内存,它接受一个字符串输入并将其反转,然后打印反转的输出。我对 C 非常陌生,不确定如何使用 malloc 为指定的用户输入分配内存。这是我目前的代码,我们在linux中运行这些程序,gcc code.c -o code
用来编译。文件的命名位置code.c
int main(void)
{
char input[256];
char temp;
int i = 0, j = 0;
scanf("%s", input);
j = strlen(input) - 1;
while (i < j)
{
temp = input[j];
input[j] = input[i];
input[i] = temp;
i++;
j--;
}
printf("Reverse = %s", input);
return 0;
}
解决方案
对于malloc
实现,您只需要替换
char input[256];
和
char* input = malloc(256);
if(input == NULL){
//uppon bad allocation NULL will be returned by malloc
perror("malloc");
return EXIT_FAILURE;
}
由于malloc
通常需要以字节为单位分配的空间,因此您可以将所需的空间乘以变量的类型:
char *input = malloc(256 * sizeof *input);
但是,由于 a 的大小char
始终为 1 字节,在这种情况下您将不需要它。
其余代码可以相同,然后在使用后input
您可以/应该释放分配的内存:
free(input);
您将需要#include <stdlib.h>
.
边注:
为避免缓冲区溢出,建议您为scanf
说明符定义一个最大大小,该大小最多为缓冲区的大小:
scanf("%255s", input);
或者也解析空格:
scanf("%255[^\n]", input);
请注意,少了一个空间,它是为空终止符保留的,由数组自动添加scanf
并强制char
作为字符串处理。
推荐阅读
- unity3d-editor - 为统一 3d 编辑器编写代码并加载 json 数据文件,但在统一编辑器中出现错误
- c# - 如何首先在数据库中自动应用查询类型(Scaffold-DbContext)而不会在重新生成时丢失它们?
- sql - SQL Server - 如果是新行,则插入行;如果存在则更新
- python - 优化大型级联文件/循环的脚本以从文件列表中丢弃有缺陷的项目
- php - laravel php 工匠迁移
- rest - 通过未格式化的电话号码搜索 Microsoft Dynamics Rest Api 记录
- validation - 在架构中允许未知键但经过验证的值
- android - 在列表视图中仔细检查 Android Studio
- ios - 用于签署证书 iPhone 分发的私钥丢失 - 未创建新的生产证书和配置文件
- android - setAlarmClock 和 setExactAndAllowWhileIdle 之间的区别