C 数组值被神秘地更改

C 数组值被神秘地更改,c,string,loops,multidimensional-array,C,String,Loops,Multidimensional Array,我正在构建两个二维矩阵,用于存储字符在某个字符之前和之后出现的次数。基本上,我正在制作一个后缀数组和一个前缀数组。为此,我编写了这段代码 #include <stdio.h> #include <string.h> #include <math.h> int main() { long long t,i,j,k,n; long long x,y,count; scanf("%lld",&t); char s[100000]; while(t--){

我正在构建两个二维矩阵,用于存储字符在某个字符之前和之后出现的次数。基本上,我正在制作一个后缀数组和一个前缀数组。为此,我编写了这段代码

#include <stdio.h>
#include <string.h>
#include <math.h>

int main()
{

long long t,i,j,k,n;
long long x,y,count;
scanf("%lld",&t);
char s[100000];
while(t--){
    y=0,count=0;
    scanf("%s",s);
    n=strlen(s);
    char suf[n][26];
    int columns=26;
    char pref[n][26];
    memset(pref, 0, sizeof(pref[0][0]) * n * columns);
    memset(suf, 0, sizeof(suf[0][0]) * n * columns);
    for(i=0;i<26;i++)
        suf[n-1][i]=0;
    for(i=n-1;i>0;i--)
        for(j=0;j<26;j++){
            if(j==s[i]-97)
            suf[i-1][j]=suf[i][j]+1;
            else
            suf[i-1][j]=suf[i][j];
        }

    for(i=0;i<26;i++)
        pref[0][i]=0;
    for(i=0;i<n;i++)
        for(j=0;j<26;j++)
        {
            if(j==s[i]-97)
            pref[i+1][j]=pref[i][j]+1;
            else
            pref[i+1][j]=pref[i][j];
        }
#包括
#包括
#包括
int main()
{
长t,i,j,k,n;
长x,y,计数;
scanf(“%lld”、&t);
chars[100000];
而(t--){
y=0,计数=0;
scanf(“%s”,s);
n=strlen(s);
char-suf[n][26];
int列=26;
字符前缀[n][26];
memset(pref,0,sizeof(pref[0][0])*n*列);
memset(suf,0,sizeof(suf[0][0])*n*列);
对于(i=0;i0;i--)

对于(j=0;j您可能希望添加输入和预期输出。请问,代码缩进背后的想法是什么?对我来说,这毫无意义。而且它似乎缺少至少一个右括号。请升级到a。您不缩进的方式对试图帮助您和您自己的人来说是一个障碍。我建议您改变习惯,开始吧缩进很有帮助。为了调试对数组硬编码初始化的更改,为了避免scanf()可能产生的所有问题,特别是如果您不检查返回值。如果可以,请阅读此处的陷阱: