C 分段错误,将元素指定给字符数组

C 分段错误,将元素指定给字符数组,c,arrays,string,C,Arrays,String,我正在尝试将元素分配给(nXn)字符数组,其中末尾是“M”,其余边框是“F”。错误是: 分段故障:核心转储 我的代码是: #include<stdio.h> #include<string.h> int main() { int n,i,j; printf("Enter the size of matrix:\n"); scanf("%d",&n); char *mat[n][n]; for(i=0;i<n;i++)

我正在尝试将元素分配给(nXn)字符数组,其中末尾是“M”,其余边框是“F”。错误是:

分段故障:核心转储

我的代码是:

#include<stdio.h>
#include<string.h>
int main()
{
    int n,i,j;
    printf("Enter the size of matrix:\n");
    scanf("%d",&n);
    char *mat[n][n];
    for(i=0;i<n;i++) //Reset matrix
    {
        for(j=0;j<n;j++)
        {
            strcpy(mat[i][j],"0");
        }
    }
    for(i=0;i<n;i++) //Diagonals
    {
        strcpy(mat[i][i],"M");
        strcpy(mat[n-1-i][i],"M");
    }
    for(i=1;i<n-1;i++) 
    {
        strcpy(mat[0][i],"F");//Top border
        strcpy(mat[i][0],"F");//Left border
        strcpy(mat[i][n-1],"F");//Right border
        strcpy(mat[n-1][i],"F");//Bottom border
    }
    return 0;
}
#包括
#包括
int main()
{
int n,i,j;
printf(“输入矩阵的大小:\n”);
scanf(“%d”和“&n”);
char*mat[n][n];

对于(i=0;i您没有正确声明矩阵,因此您没有使用正确的代码进行设置

如果您想要一个N×N字符数组,而不是一个C字符串的N×N数组,那么您应该声明它而不带星号:

char mat[n][n];
现在,您可以对
mat
的元素使用简单的字符常量赋值(注意单引号),如下所示:

for(i=0;i<n;i++) {
    for(j=0;j<n;j++) {
        mat[i][j] = '0';
    }
}

您声明了指向char的二维指针数组,而不是二维字符数组

char *mat[n][n];
您不应该使用函数strcpy,因为二维数组不包含字符串

我想你的意思是

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

int main(void) 
{
    size_t n;

    printf( "Enter the size of matrix: " );
    scanf( "%zu", &n );

    char mat[n][n];

    memset( mat, '0', n * n );

    for ( size_t i = 0; i < n; i++ )
    {
        mat[i][i] = 'M';
        mat[i][n - i - 1] = 'M';
    }

    for ( size_t i = 1; i < n - 1; i++ )
    {
        mat[0][i]   = 'F';
        mat[n-1][i] = 'F';
        mat[i][0]   = 'F';
        mat[i][n-1] = 'F';
    }

    putchar( '\n' );

    for ( size_t i = 0; i < n; i++ )
    {
        for ( size_t j = 0; j < n; j++ )
        {
            printf( "%c", mat[i][j] );
        }

        putchar( '\n' );
    }

    return 0;
}
考虑到根据C标准,无参数的主要功能应声明如下

int main( void )

你需要为mat[i][j]分配内存。也许你想要
char-mat[n][n][2]
char-mat[n][n];
然后
mat[X][Y]='?';
而不是
strcpy(mat[X][Y],“?”;
看起来你真的想要一个2d字符数组,而不是指针,你想要用
mat i][j]来分配值='0';
不是strcpy。您程序中的第一个
strcpy
是什么?将“0”添加到您的所有项目中。我使用了您代码中的一个示例。
mat[x][y]='x';
也很好用。谢谢它奏效了。我也这么做了,但使用了双引号。:)
#include <stdio.h>
#include <string.h>

int main(void) 
{
    size_t n;

    printf( "Enter the size of matrix: " );
    scanf( "%zu", &n );

    char mat[n][n];

    memset( mat, '0', n * n );

    for ( size_t i = 0; i < n; i++ )
    {
        mat[i][i] = 'M';
        mat[i][n - i - 1] = 'M';
    }

    for ( size_t i = 1; i < n - 1; i++ )
    {
        mat[0][i]   = 'F';
        mat[n-1][i] = 'F';
        mat[i][0]   = 'F';
        mat[i][n-1] = 'F';
    }

    putchar( '\n' );

    for ( size_t i = 0; i < n; i++ )
    {
        for ( size_t j = 0; j < n; j++ )
        {
            printf( "%c", mat[i][j] );
        }

        putchar( '\n' );
    }

    return 0;
}
Enter the size of matrix: 10

MFFFFFFFFM
FM000000MF
F0M0000M0F
F00M00M00F
F000MM000F
F000MM000F
F00M00M00F
F0M0000M0F
FM000000MF
MFFFFFFFFM
int main( void )