Методы чтения строки, не зная ее длины в C

Чтобы прочитать строку, не зная ее длины, в C можно использовать несколько методов. Вот некоторые из них:

  1. Использование контрольного значения: вы можете выбрать специальный символ, например нулевой знак завершения («\0»), чтобы отметить конец строки. Читайте символы один за другим, пока не встретите контрольное значение.
#include <stdio.h>
int main() {
    char str[100];
    char ch;
    int i = 0;
    printf("Enter a string: ");
    while ((ch = getchar()) != '\n') {
        if (i < sizeof(str) - 1) {
            str[i++] = ch;
        }
    }
    str[i] = '\0';
    printf("String: %s\n", str);
    return 0;
}
  1. Использование динамического выделения памяти. Вы можете динамически выделять память для строки с помощью таких функций, как malloc, и при необходимости перераспределять память по мере чтения символов, пока не дойдете до конца строки.
#include <stdio.h>
#include <stdlib.h>
int main() {
    char* str = NULL;
    char ch;
    int i = 0;
    int size = 0;
    printf("Enter a string: ");
    while ((ch = getchar()) != '\n') {
        if (i >= size) {
            size += 10;
            str = realloc(str, size * sizeof(char));
        }
        str[i++] = ch;
    }
    str[i] = '\0';
    printf("String: %s\n", str);
    free(str);
    return 0;
}
  1. Использование цикла с предопределенной максимальной длиной: если у вас есть верхний предел длины строки, вы можете использовать цикл для чтения символов до этого предела. Обязательно проверяйте конец строки или максимальную длину, чтобы избежать переполнения буфера.
#include <stdio.h>
int main() {
    char str[100];
    int i;
    printf("Enter a string: ");
    for (i = 0; i < sizeof(str) - 1; i++) {
        int ch = getchar();
        if (ch == '\n' || ch == EOF) {
            break;
        }
        str[i] = ch;
    }
    str[i] = '\0';
    printf("String: %s\n", str);
    return 0;
}

Это всего лишь несколько способов чтения строки в C, не зная ее длины. Вы можете выбрать тот, который лучше всего соответствует вашим требованиям.