使用 scanf 的分段错误
Segmentation Fault for using scanf
我在尝试解决 codeforces 中的问题时使用基本 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;
}
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] = '[=11=]' //make sure the string is terminated.
我在尝试解决 codeforces 中的问题时使用基本 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;
}
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] = '[=11=]' //make sure the string is terminated.