Есть функция, где дают указатель на массив (я не знаю его длину) и 2 целых чисел(min, max). Функция должна брать ввод и выдавать ошибку, если кол-во символов больше max или меньше min. А если все норм, то должна возвращать этот string через указатель на массив.
1) Я не понимаю как можно как-то клонировать массив через указатель (ибо чтобы создать, я не знаю, какой у него должен быть размер)
2) Если вводят больше символов, чем в массиве, как обнулить (ибо array[] = {} не работает)?
Не знаю, может я вообще не правильно думаю как её написать :(
Возможна кровь из глаз, но я прикрепил свой код (как смог) и ошибки (я не знаю, что они значат).


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define BUFFER 1024
void input(char* line, int min, int max) {
int length = 0;
printf("Input string: ");
fgets(line, BUFFER, stdin);
line[strlen(line) - 1] = 0;
length = strlen(line);
if (length < min) {
puts("Error: the string is shorter than the specified one.");
line[0] = 0;
}
if (length > max) {
puts("Error: the string is longer than the specified one.");
line[0] = 0;
}
}
int main(void) {
char line[BUFFER] = { 0 };
int min = 10;
int max = 25;
do input(line, min, max); while (!strlen(line));
printf("Output string: %s\n", line);
system("pause > nul");
return 0;
}
Каким образом должна определяться длина массива?
Так и задумано, что в функцию передаётся двойной указатель (указатель на двумерный массив или указатель на массив строк)?
В задании указано "предполагается, что размер строки ограничен параметром max", поэтому, если не допустимо передаваемый массив менять по ссылке, создаете новый длинной max. Хотя я не понимаю что мешает работать непосредственно с передаваемой строкой по указателю, если она не const.
В 191 строке ошибка синтаксиса. massiv [] с левой стороны от равно используется для обьявления массива, если компилятор может вычислить его размер сам. massiv[NUM] слева является обьявлением массива длинной NUM, справа - возвращает элемент под индексом NUM.
char array [] = {'a','b','c','d'}; - все ок, размер явно задан в правой части равенства (4)
char array []; - ошибка, размер массива неизвестный.
char array [] = *ptr; - ошибка, массиву нельзя присваивать указатель.
После того как массив принимается аргументом по указателю операции с ним производятся без * (не требует разыменования).
И еще, когда вы принимаете в функцию указатель на массив, внутри функции создается его копия, которая наружу не выйдет никак. А следовательно stringPtr = arr
не имеет смысла. Если хотите изменить внешний указатель, следует принимать его по ссылке &*stringPtr
Например,
void функцияТестера (void) {
char stringValue[7];
getCString(stringValue, 3, 6);
}