Чтобы прочитать строку, не зная ее длины, в C можно использовать несколько методов. Вот некоторые из них:
- Использование контрольного значения: вы можете выбрать специальный символ, например нулевой знак завершения («\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;
}
- Использование динамического выделения памяти. Вы можете динамически выделять память для строки с помощью таких функций, как
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;
}
- Использование цикла с предопределенной максимальной длиной: если у вас есть верхний предел длины строки, вы можете использовать цикл для чтения символов до этого предела. Обязательно проверяйте конец строки или максимальную длину, чтобы избежать переполнения буфера.
#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, не зная ее длины. Вы можете выбрать тот, который лучше всего соответствует вашим требованиям.