C 分段错误,将元素指定给字符数组
我正在尝试将元素分配给(nXn)字符数组,其中末尾是“M”,其余边框是“F”。错误是: 分段故障:核心转储 我的代码是: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++)
#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 )