注册 登录
编程论坛 C语言论坛

堆分配内存实现二维字符数组后怎么做可以修改行内一个字符?

星系隐 发布于 2020-12-20 16:22, 1382 次点击
我用malloc分配内存想做一个二维字符数组,结果做出来了,但是不能修改里面一行里的一个字符,只能给一行赋值,请问怎么做可以修改其中一个字符?
#include <stdio.h>

char **map(int kuan, int gao);

int main()
{
    int kuan = 9;
    int gao = 9;
    //map是一个指向指针的指针
    char **map1 = map(9, 9);
    map1[0] = "c";
    map1[1] = "abcdf";
    printf("%s", map1[1]);
    printf("\n");
    printf("%c", map1[1][1]);
    printf("\n");
    //map1[1][0]='k';
    //停止运行
    //*(map1[1][0])='k';
    //illegal indirection
    return 0;
}

char **map(int kuan, int gao)
{
    char *map =malloc(sizeof(char *) * kuan);
    int i1;
    int i2;
    i1 = 0;
    for (; i1 < kuan; i1 = i1 + 1)
    {
        map[i1] = malloc(sizeof(char*) * gao);
        i1 = i1 + 1;
    }
    i1 = 0;

    return map;
}
2 回复
#2
rjsp2020-12-21 08:43
堆分配内存实现二维字符数组后怎么做可以修改行内一个字符?
map是一个指向指针的指针

你在代码中明明说它是个“指向指针的指针”,怎么又在标题中说它是“二维数组”?你明白不明白它不是二维数组?

程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char** map( size_t kuan, size_t gao );

int main( void )
{
    size_t kuan = 9;
    size_t gao = 9;

    char** p = map(9, 9);
    strcpy( p[0], "c" );
    strcpy( p[1], "abcdf" );
    printf( "%s\n", p[1] );
    printf( "%c\n", p[1][1] );

    p[1][0] = 'k';
    printf( "%s\n", p[1] );
}

char** map( size_t kuan, size_t gao )
{
    char** map = malloc(kuan * sizeof(char*));
    for( size_t i=0; i!=kuan; ++i )
        map[i] = malloc(gao * sizeof(char));
    return map;
}
#3
星系隐2020-12-24 16:24
回复 2楼 rjsp
谢谢,我现在明白了
1