C Динамический массив на основе ввода с консоли - PullRequest
0 голосов
/ 29 августа 2011

Я пишу программу, которая хранит ввод с консоли.Чтобы упростить его, скажем, мне нужно вывести то, что было записано на консоль.

Итак, у меня есть что-то вроде этого:

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 ]

1 голос
/ 29 августа 2011
#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);
}

Это позволяет довольно большое пространство.Вы можете проверить, действительно ли вы получили новую строку в данных.

Если этого недостаточно, исследуйте функцию POSIX 2008 getline(), доступную в Linux, которая динамически распределяет память по мере необходимости..

0 голосов
/ 29 августа 2011

Вот пример - вам нужно проверить ввод и убедиться, что вы не переполняете буфер. В этом примере я отказываюсь от чего-либо, превышающего максимальную длину, и даю команду пользователю повторить попытку. Другим подходом будет выделение нового (большего) буфера, когда это произойдет.

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);
}
...