我正在尝试使用基本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;
}
答案 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.