Я немного запутался в строках на C. Я понимаю, что объявление размера буфера важно, так как в противном случае это может вызвать переполнение буфера. Но мне нужно знать, как мне взять строковый ввод, размер которого я не знаю. Например, если я хотел взять строку текста у пользователя в качестве входных данных, и у меня не было возможности узнать, как долго будет длиться его текст, как мне это сделать?
Я пытался динамически распределять память, когда пользователь вводит данные. Вот код -
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *str, ch;
int size = 10, len = 0;
str = realloc(NULL, sizeof(char)*size);
if (!str)return str;
while (EOF != scanf_s("%c", &ch) && ch != '\n')
{
str[len++] = ch;
if (len == size)
{
str = realloc(str, sizeof(char)*(size += 10));
if (!str)return str;
}
}
str[len] = '\0';
printf("%s\n", str);
free(str);
}
Проблема в том, что, когда я компилирую его с использованием VS-2017, я получаю эти ошибки-
source.c (10): предупреждение C4473: 'scanf_s': недостаточно аргументов передано
для строки формата
source.c (10): примечание: заполнители и их параметры ожидают 2
аргументы с переменным числом, но 1 были предоставлены
source.c (10): примечание: отсутствующий переменный аргумент 2 требуется
строка формата "% c"
source.c (10): примечание: этот аргумент используется в качестве размера буфера
Я думаю, что динамическое выделение памяти во время работы (как в приведенном выше коде) должно работать, но я, вероятно, что-то делаю не так. Есть ли способ сделать эту работу?
РЕДАКТИРОВАТЬ: Word.