尝试让用户输入多行输入,但我不知道他们的输入会有多长。我想我会想要使用char指针数组,但为什么不能使用以下代码呢?编译得很好,我只是得到意想不到的结果。
char x[] = "";
scanf("%s", x);
char y[] = "";
scanf("%s", y);
printf("You entered: '%s' and '%s'\n", x, y);
这是因为我正在初始化x
和y
的方式吗?
答案 0 :(得分:1)
没有办法简单地调整字符串大小。
如果输入长度未知,则基本上有两个选项:
如果您真的想要动态增加缓冲区大小,则需要使用动态内存管理(malloc
,calloc
,free
,realloc
,... )。
尝试以下链接获取startet:
如果您确实需要(或者如果您想学习),请仅使用数字2。
答案 1 :(得分:0)
此示例显示如何读取未知长度的一行用户输入。
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
// This constant is small so you can easily examine how this code works in debugger
// Buffer increase step
#define BUFSTEP 5
int main()
{
char *in_str_buf;
size_t buf_len;
size_t str_len;
in_str_buf = NULL;
buf_len = 0;
str_len = 0;
// Read string by parts
do
{
char *in_str_buf_new;
if ((in_str_buf_new = realloc(in_str_buf, buf_len + BUFSTEP)) == NULL)
{
// realloc failed
free(in_str_buf);
return -1;
}
in_str_buf = in_str_buf_new;
buf_len += BUFSTEP;
if (fgets(in_str_buf + str_len, buf_len - str_len, stdin) == NULL)
{
// Error or end-of-file condition occured
if (ferror(stdin))
{
free(in_str_buf);
return -2;
}
if (feof(stdin))
{
break;
}
}
str_len = strlen(in_str_buf);
}
while (str_len && in_str_buf[str_len-1] != '\n');
// Remove newline for convenience
in_str_buf[str_len ? str_len - 1 : 0] = '\0';
printf("Whole string: %s\n", in_str_buf);
free(in_str_buf);
return 0;
}