我用c写了一下Z型变换,能运行成功,但是我修改了一个小地方就不行了,修改的地方我注释了一下,希望来这里寻求一下帮助。


char * convert(char * s, int numRows)
{ 
   int longs = strlen(s); 
  if( numRows>=longs )
  {
      return s;
  }
  if( numRows == 1 )
  {
      return s;
  }
  char arr[1001][1001]={0};
  char arr1[1001]={0};//就是这里 我问一下 我把1001内容定为了0,然后返回失败
  int k=0;
  int j=0;
  int i=0;
  while(s[k])
  { 
    while( i<numRows && s[k])
    {
        arr[i][j]=s[k];
         i++;
         k++; 
    }
    i -=2;
    j++; 
    while(i && s[k])
    {
      arr[i][j]=s[k];
      i--;
      j++;
      k++;
    }
  } 
    int ret =0;
    for(int m =0; m<numRows;m++)
    {
      for(int n=0;n<j;n++)
      {
        if(arr[m][n])
        {
         arr1[ret]=arr[m][n];
         ret++;
        }
      }
    }
    return arr1; 
  }

  
```c
char* convert(char* s, int numRows) {
        if (numRows >= (int)strlen(s))
         { 
             return s; 
         }
        if (numRows == 1)
         { 
             return s;
         }
        int i = 0, j = 0, k = 0; 
        char arr[1001][1001] = { 0 };
        char *arr1 = (char *)malloc(sizeof(char) * 1001);//这里我这次使用
        memset(arr1, 0, 1001);//的是开辟空间和memset来初始化,然后就能成功
        while (s[k]) 
        {
            while (i < numRows && s[k]) 
            { 
                arr[i][j] = s[k];
                i++;
                k++;
             }
            i -= 2; //表示第n-1行
            j++;
            while (i && s[k]) 
            {
                 arr[i--][j++] = s[k++]; 
            }
        }
        int ret = 0;
        for (int m = 0; m < numRows; m++) 
        {
            for (int n = 0; n < j; n++) 
            {
                if (arr[m][n]) 
                {
                    arr1[ret++] = arr[m][n];
                }
            }
        }
        return arr1;
    }

```

通过int arr1[1001]定义的变量是局部变量,在栈里面,你却把它返回了,再次用的时候就把栈踩了。
这个问题不是初始化问题,是变量作用域问题。