【问题标题】:How to proprely modify a 2d array in C?如何正确修改C中的二维数组?
【发布时间】:2018-10-27 20:41:23
【问题描述】:

您好,我收到此代码的段错误:

#include <stdio.h>
#include <stdlib.h>

int     main()
{
    char **array;
    int i = 0;

    array = (char **)malloc(sizeof(char *) * 20);
    for (i = 0; i < 20; i++)
    {
        array[i] = (char *)malloc(sizeof(char *) * 20);
        array[i] = "____________________";
    }
    array[0][0] = '2';
    return(0);
}

我做错了什么? 当我需要修改二维数组时,我很困惑,我最好的选择是什么?

非常感谢。

【问题讨论】:

    标签: c arrays segmentation-fault


    【解决方案1】:

    你得到一个段错误,因为使用array[i] = "____________________"; 你让每个array[i] 指向一个字符串文字。请注意,您不要复制文字的内容,而是让array[i] 直接指向它。因此,使用 array[0][0] = '2' 时,您正在更改字符串文字,这是未定义的行为(在这种情况下很可能作为段错误变得明显)。

    请改用strcpy(array[i],"____________________);

    顺便说一句:写array[i] = malloc(sizeof(char) * (20+1));(注意这里的sizeof(char)而不是sizeof(char*)+1作为字符串终止字符)。

    【讨论】:

    • 哦,好吧,我明白了,但在这种情况下 strdup 不是更好吗?并且我分配了 20 个字符串,那么为什么类型不应该是 (char *) ?
    • 你也可以使用strdup,虽然它不是标准的。
    • sizeof(char)定义为 1。
    猜你喜欢
    • 2015-05-10
    • 1970-01-01
    • 2021-09-10
    • 2011-07-13
    • 2016-01-22
    • 2013-11-30
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    相关资源
    最近更新 更多