为读取的输入功能动态分配内存时出现的问题

问题描述 投票:0回答:1

我在应该从用户读取字符串的函数中遇到麻烦。我总是得到(null)作为输出。

对于这种问题,这甚至是“正确”的方法吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int getString(char *input);

int main(void)
{
        char *arr = NULL;
        printf("please enter string: ");
        getString(arr);
        printf("%s", arr);
        return 0;
}

int getString(char *input)
{
        int i;
        char c;
        char *tmp;
        input = malloc(sizeof(char));
        for (i = 0; (c = getchar()) != EOF && c != '\n'; ++i) {
                tmp = realloc(input, (i + 2) * sizeof(char));
                if (tmp == NULL) {
                        free(input);
                        printf("allocation error");
                        return -1;
                }
                input = tmp;
                input[i] = c;
        }
        input[i] = '\0';
        return 0;
}
c user-input dynamic-memory-allocation getchar
1个回答
0
投票

由于input是函数的局部变量,因此您也应该返回指针,因此在main中,arr仍为NULL


0
投票

如果要动态分配字符串,则需要传递一个[char*的指针],而不仅仅是char *。这样,函数可以修改实际的char *指针,调用者将看到结果。类似这样的东西:

int getString(char **input) { int i; char c; char *tmp, *cur = NULL; for (i = 0; (c = getchar()) != EOF && c != '\n'; ++i) { tmp = realloc(cur, (i + 2) * sizeof(char)); if (tmp == NULL) { free(cur); printf("allocation error"); return -1; } cur = tmp; cur[i] = c; } cur[i] = '\0'; *input = cur; return 0; }

© www.soinside.com 2019 - 2024. All rights reserved.