Ошибка сегментации при использовании scanf - PullRequest
0 голосов
/ 29 марта 2019

Я использую basic scanf, чтобы получить целочисленный ввод при попытке решить проблему в codeforces, но при получении ввода я получаю segfault.Где проблема?

#include<stdio.h>
#include<string.h>
int main(void){
int n,t;

scanf("%d",&n);
scanf("%d",&t);
char arr[n];
gets(arr);
int x=0,i;
for (i=0; i<strlen(arr)-1; i++){
if (arr[i]=='B' && arr[i+1]=='G') {arr[i]='G'; arr[i+1]='B'; x++; if (x==t) break;}

}

printf("%s",arr);
return 0;

}

1 Ответ

0 голосов
/ 01 апреля 2019

Комментарий Дженса указал на причину. Вот более подробный ответ.

Следующий код проблематичен.

scanf("%d", &n);
char arr[n];
gets(arr)

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

предлагаемое исправление:

scanf("%d", &n);
char arr[n];
fgets(arr, n-1, stdin);
arr[n-1] = '\0' //make sure the string is terminated. 
...