我尝试将元素分配给 (nXn) 字符数组,其中末尾是“M”,其余边框是“F”。错误是:
Segmentation fault :core dumped
我的代码是:
#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;
}
我是编程新手,不太清楚为什么会发生此错误。有什么建议/帮助吗?
最佳答案
您没有正确声明您的矩阵,因此您没有使用正确的代码来设置它。
如果您想要一个 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 是您希望矩阵保存的最长字符串加上 1 作为空终止符。如果所有字符串都是单个字符,就像您的示例中的那样,声明将变为
char mat[n][n][2];
关于c - 段错误错误,将元素分配给字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45798146/