我正在编写一个程序来存储来自控制台的输入。为了简化它,我想要输出写入控制台的内容。
所以我有这样的事情:
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 *指定为该大小。
答案 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);
}