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

标签 c arrays string

我尝试将元素分配给 (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/

相关文章:

c - ev_loop() 导致 valgrind 错误 - 地址位于堆栈 ptr 下方

使用 Strcmp 的 C 段错误

java - main 中的 Arrays.sort() 错误

string - 在 bash 中使用随机可打印字符串创建特定大小的文件

javascript - 正则表达式 - 验证结束标记 - 模板引擎

c - 一个传递整数统计信息并返回包含结果的结构的函数

c - 什么决定了一个全局定义的字符串是在数据段的读写区还是只读区?

c++ - 合并排序与 pthreads 在 c++ 中不起作用

Python pandas/numpy 将 1 填充到具有值的单元格,并将 0 填充到 nan 的单元格

java - 字符串的 replaceAll 方法的奇怪行为