Совместное использование scanf и fgets

Требовалось считать целое число, а затем строку. Написал такой код:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    int str_len; // Длина строки
    scanf("%i", &str_len);
    
    char* str;
    fgets(str, str_len, stdin);
    return 0;
}

После ввода строки >>4 red получил ошибку: timeout: the monitored command dumped core ./Playground/runner.sh: line 88: 12 Segmentation fault timeout "$runtime" "$output" - < "/usercode/inputFile" str_len, stdin);
В чем дело?


Ответы (1 шт):

Автор решения: Joker

Строка fgets(str, str_len, stdin); получает на вход пустой указатель, а не указатель на буфер. Должно быть так:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    int str_len; // Длина строки
    scanf("%i", &str_len);
    
    char* str = malloc(str_len);
    fgets(str, str_len, stdin);
    return 0;
}
→ Ссылка