#include <stdio.h>
#include <stdlib.h>
int main()
{
int size=10;
char string1[50];
char *string2;
string2=(char *)malloc(size*sizeof(char));
fgets(string1,10,stdin);
printf("%s",string1);
fgets(string2,10,stdin);
printf("%s",string2);
}
В этом коде две строки - это массив, а другой - динамически созданный с использованием указателя.Что будет с размером строки в этом коде?
- Если мой ввод меньше 50 для строки1 и менее 10 для строки2, пространство, которое не заполнено, теряется, если да, то как уменьшить размер.
- В случае строки 2 параметр размера malloc равен 10, а параметры размера fgets - 10, что произойдет, если я увеличу размер до fgets (string2,50, stdin), который больше размера malloc?
- Как вычислить конечный размер входной строки в каждом случае? Я использовал оператор sizeof, но дал строковый код размером 50 и 10 соответственно для string1 и string2
- Есть ли другой лучший подход для создания динамического строка?
1) Да. Пространство будет потрачено впустую. Ответ: уменьшите выделение. Что касается названия вопроса: ничего. –
2). Краш. 3) вопрос неверен. Размер второй строки не равен 10. Это размер указателя - обычно 4 или 8. –
@WeatherVane спасибо за ввод :) – ekaf