使用scanf的分段错误

问题描述 投票:0回答:1

我在尝试解决代码中的问题时使用基本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;

}
segmentation-fault c11
1个回答
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. 
© www.soinside.com 2019 - 2024. All rights reserved.