使用scanf的分段错误

时间:2019-03-29 10:36:18

标签: segmentation-fault c11

我正在尝试使用基本scanf来获取整数输入,同时尝试解决编解码器中的问题,但是在获取输入时却遇到了段错误。问题出在哪里?

#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 :(得分:0)

Jens的评论指出了原因。这是一个更详尽的答案。

以下代码有问题。

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

如果gets读取的输入字符串的长度大于n,则将超出界限。输入字符串始终小于n个字符可能不是问题。这里是a live test来说明问题。

建议的解决方法:

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