微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在C中动态分配内存

如何解决如何在C中动态分配内存

我正在尝试制作一个字计数器程序,并希望在没有额外空间的情况下为字符串动态分配内存。到目前为止,这是我的代码

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

char *strmalloc(char *string);
char *user_input = NULL;

int main(void) {
    printf("Enter a sentence to find out the number of words: ");
    strmalloc(user_input);
    printf("You entered %s",user_input);
    return 0;
}

char *strmalloc(char *string) {
    char *tmp = NULL;
    size_t size = 0,index = 0;
    int ch;

    while ((ch = getchar()) != '\n' && ch != EOF) {
        if (size <= index) {
            size += 1;
            tmp = realloc(string,size);
            if (!tmp) {
                free(string);
                string = NULL;
                break;
            }
            string = tmp;
        }
        string[index++] = ch;
    }
    return string;
}

输出如下:

Enter a sentence to find out the number of words: Testing program
You entered (null)
Process finished with exit code 0

我认为在 while 循环中,我重新分配了 1 个字节的内存,直到字符串正好适合?我做错了什么?

解决方法

在您的职能中:

char *strmalloc(char *string) { ===> char *strmalloc(char **string) {

tmp = realloc(string,size); ===> tmp = realloc(*string,size);

string = NULL; ===> *string = NULL;

string = tmp; ===> *string = tmp;

string[index++] = ch; ===> (*string)[index++] = ch;

return string; ===> return *string;

在调用函数中:

strmalloc(user_input); ===> strmalloc(&user_input);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。