系統呼叫了 abort 函式! *** stack smashing detected ***: terminated Aborted (core dumped)
#include <stdio.h>
#include <string.h>
int distinguish(int a){
if (97<=a&&a<=122){
return 1;
}
if (65<=a&&a<=90){
return 2;
}
if (a=='\n'||a=='\0'){
return 0;
}
}
int F(int a[] ,int i ,int k ,int m){
if(i==m-1)return 0;
for(int j=1;j<k;j++){
if(a[i]!=a[i+j]){
return 0;
}
if(j==k-1&&a[i]==a[i+k]){
return 1;
}
if(a[i]==a[i+k]){
return 0;
}
if(j==k-1&&a[i]!=a[i+k]){
return 1+F(a,i+k,k,m);
}
}
if(k==1){
if(a[i]!=a[i+1]){
return 1+F(a,i+1,k,m);
} else{
if(i!=0&&a[i]!=a[i-1])return 1;
return 0;
}
}
return 0;
}
int C(int a[] ,int m ,int k ){
int v=0;
for(int i=0;i<m;i++){
if(v<F(a,i,k,m)){
v=F(a,i,k,m);
}
}
return v;
}
int main(){
char str_1[10000];
int m=0;
int k;
scanf("%d",&k);
scanf("%s",&str_1);
m=strlen(str_1)-1;
int nbr[m];
for(int i=0;i<m;i++){
nbr[i]=distinguish((int)str_1[i]);
}
int t=0;
t=k*C(nbr,m,k);
printf("%d",t);
return 0;
}
小弟我今天做了一整天不知道為什麼一直觸發
記憶體區段錯誤! Segmentation fault (core dumped)
和系統呼叫了 abort 函式! *** stack smashing detected ***: terminated Aborted (core dumped)
求大佬們指點迷津!!!
以下是我的程式碼:
#include
#include
int distinguish(int a){
if (97<=a&&a<=122){
return 1;
}
if (65<=a&&a<=90){
return 2;
}
if (a=='\n'||a=='\0'){
return 0;
}
}
int F(int a[] ,int i ,int k ,int m){
if(i==m-1)return 0;
for(int j=1;j<k;j++){
if(a[i]!=a[i+j]){
return 0;
}
if(j==k-1&&a[i]==a[i+k]){
return 1;
}
if(a[i]==a[i+k]){
return 0;
}
if(j==k-1&&a[i]!=a[i+k]){
return 1+F(a,i+k,k,m);
}
}
if(k==1){
if(a[i]!=a[i+1]){
return 1+F(a,i+1,k,m);
} else{
if(i!=0&&a[i]!=a[i-1])return 1;
return 0;
}
}
return 0;
}
int C(int a[] ,int m ,int k ){
int v=0;
for(int i=0;i<m;i++){
if(v<F(a,i,k,m)){
v=F(a,i,k,m);
}
}
return v;
}
int main(){
char str_1[10000];
int m=0;
int k;
scanf("%d",&k);
scanf("%s",&str_1);
m=strlen(str_1)-1;
int nbr[m];
for(int i=0;i<m;i++){
nbr[i]=distinguish((int)str_1[i]);
}
int t=0;
t=k*C(nbr,m,k);
printf("%d",t);
return 0;
}
字串長度最大100000,你陣列開太小了