Ввод строки до нажатия enter в Си
Нужно посчитать количество нажатых клавиш (символов) в строке, включая и пробелы и считывать до тех пор, пока не нажали "Enter".
int main()
{
char str [100] = {0};
int count = 0;
for(int i = 0; str[i] != '\n'; i++)
{
scanf("%c", str[i]);
count += 1;
}
return 0;
}
Программа почему - то не работает и выдает segmentation fault. Что делать?
Ответы (1 шт):
Segmentation fault это ошибка, происходящая когда происходит запись в не выделенный для процесса участок памяти.
При вводе в str[i] видимо вводится больше символов чем 100, на что не хватает массива. Необходимо проверять количество введенных символов.
Для решения это задачи необходимо выделить память динамически при помощи calloc() или malloc(), а в случае если вместимости массива не хватает увеличивать при помощи realloc() вдвое.
#include <stdio.h>
#include <stdlib.h>
int main()
{
size_t capacity = 20, counter = 0;
char *str = (char*)calloc(capacity, sizeof(char));
str[counter] = getchar();
while(str[counter] != '\n')
{
++counter;
if(counter == capacity)
{
capacity *= 2;
str = (char*)realloc(str, capacity * sizeof(char));
}
str[counter] = getchar();
}
printf("the string is: >>%s<<\n", str);
free(str);
return 0;
}
А еще рекомендую использовать getchar() вместо scanf()
Вот как и обещал мое решение этой задачи, по-сути должно поддерживать очень длинный строки.