C中的标准输入,有足够的内存

rryofs0p  于 2023-08-03  发布在  其他
关注(0)|答案(2)|浏览(86)

我正在开发一个程序,它从STDIN接收命令(指函数)及其相应的参数。举例来说:add 2 3。我想输入"add 2 3"作为字符数组,但我想知道是否有任何方法可以为每个输入分配足够的内存,以免浪费内存,或者内存不足。

q5iwbnjs

q5iwbnjs1#

如果你使用的是POSIX,你可以使用getline来读取输入行并分配内存:

char *line = NULL;
size_t len = 0;
while (getline(&line, &len, stdin) > 0) {
    // read a line of input into line
    ... do something with it
}
free(line);
line = NULL;   // in case we want to use it again

字符串
这将根据需要分配内存来保存读取的行(为每个后续行重用相同的内存,因此如果您想要保存一行,则需要复制它)。它分配的可能比一行所需的多,但是您可以在len中看到它实际分配了多少

whitzsjs

whitzsjs2#

典型的方法是使用一个不断增长的缓冲区,当满的时候它会加倍。这样,您将使用最多2倍的内存量,你需要的。即使在DOS的日子里,我们也没有分配足够的资金。那将是灾难性的。

char *getline()
{
    static char *buf;
    static size_t bufsiz;
    if (!bufsiz) { buf = malloc(16); if (!buf) return buf; /* ERROR */ bufsiz = 16; }
    size_t n = 0;
    int c;
    while ((c = getc(stdin)) != EOF && c != '\n') {
        buf[n++] = c;
        if (n == bufsiz) {
            char *newbuf = realloc(buf, bufsiz << 1);
            if (!newbuf) return NULL;
            buf = nebuf;
            bufsiz <<= 1;
        }
    }
    buf[n] = 0;
    return buf;
}

字符串

相关问题