C Dynamic Array基于来自控制台的输入

时间:2011-08-29 00:11:44

标签: c arrays io char

我正在编写一个程序来存储来自控制台的输入。为了简化它,我想要输出写入控制台的内容。

所以我有这样的事情:

int main()
{
  char* input;
  printf("Please write a bunch of stuff"); // More or less.
  fgets() // Stores the input to the console in the input char*

  printf(input);
}

这就是或多或少。试着给你一般的想法。那么如果他们输入的内容大小为999999999999该怎么办呢?如何动态地将char *指定为该大小。

2 个答案:

答案 0 :(得分:1)

#include <stdio.h>

int main(void)
{
    char input[8192];
    printf("Please type a bunch of stuff: ");
    if (fgets(input, sizeof(input), fp) != 0)
        printf("%s", input);
    return(0);
}

这允许相当大的空间。您可以检查数据中是否确实有换行符。

如果这还不够,那么请调查Linux中可用的POSIX 2008函数getline(),它会根据需要动态分配内存。

答案 1 :(得分:0)

这是一个示例 - 您需要验证输入并确保不会溢出缓冲区。在此示例中,我丢弃超过最大长度的任何内容并指示用户再次尝试。另一种方法是在发生这种情况时分配一个新的(更大的)缓冲区。

fgets()第二个参数是您将从输入中读取的最大字符数。我实际上在这个例子中考虑了\n并且摆脱它,你可能不想这样做。

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

void getInput(char *question, char *inputBuffer, int bufferLength)
{
    printf("%s  (Max %d characters)\n", question, bufferLength - 1);
    fgets(inputBuffer, bufferLength, stdin);

    if (inputBuffer[strlen(inputBuffer) -1] != '\n')
    {
        int dropped = 0;
        while (fgetc(stdin) != '\n')
                dropped++;

        if (dropped > 0) // if they input exactly (bufferLength - 1) characters, there's only the \n to chop off
        {
                printf("Woah there partner, your input was over the limit by %d characters, try again!\n", dropped );
                getInput(question, inputBuffer, bufferLength);
        }
    }
    else
    {
        inputBuffer[strlen(inputBuffer) -1] = '\0';      
    }

}


int main()
{
    char inputBuffer[10];
    getInput("Go ahead and enter some stuff:", inputBuffer, 10);
    printf("Okay, I got: %s\n",inputBuffer);
    return(0);
}