首页 > 解决方案 > 使用 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;
}

标签: cmallocdynamic-memory-allocationc-strings

解决方案


对于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作为字符串处理。


推荐阅读