分段错误错误,将元素分配给字符数组

时间:2017-08-21 13:16:28

标签: 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++) //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;
}

我是编程新手,并不知道为什么会出现这个错误。有什么建议/帮助吗?

2 个答案:

答案 0 :(得分:3)

您没有正确声明您的矩阵,因此您没有使用正确的代码进行设置。

如果你想要一个N×N字符数组,而不是N×N数组的C字符串,你应该声明它没有星号:

char mat[n][n];

现在你可以使用字符常量的简单分配(注释单引号)到mat的元素,如下所示:

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

如果你想要一个N×N数组的C字符串,并且这些字符串总是来自字符串文字,你可以使用赋值来代替字符串复制:

char *mat[n][n];
for(i=0;i<n;i++) {
    for(j=0;j<n;j++) {
        mat[i][j] = "0"; // Double quotes are back
    }
}

最后,如果你想使用字符串函数,你需要将数组更改为N×N×M,其中M是您希望矩阵保持的最长字符串加上一个用于null终止符的字符串。如果所有字符串都是单个字符,就像它们在您的示例中一样,声明变为

char mat[n][n][2];

答案 1 :(得分: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;
}

程序输出可能看起来如下

Enter the size of matrix: 10

MFFFFFFFFM
FM000000MF
F0M0000M0F
F00M00M00F
F000MM000F
F000MM000F
F00M00M00F
F0M0000M0F
FM000000MF
MFFFFFFFFM

考虑到根据C标准,没有参数的函数main应声明为

int main( void )