标题:堆分配内存实现二维字符数组后怎么做可以修改行内一个字符?
只看楼主
星系隐
Rank: 2
等 级:论坛游民
威 望:1
帖 子:96
专家分:36
注 册:2018-6-16
 问题点数:0 回复次数:2 
堆分配内存实现二维字符数组后怎么做可以修改行内一个字符?
我用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;
}
搜索更多相关主题的帖子: map 修改 int 字符 char 
2020-12-20 16:22
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
堆分配内存实现二维字符数组后怎么做可以修改行内一个字符?
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;
}
2020-12-21 08:43
星系隐
Rank: 2
等 级:论坛游民
威 望:1
帖 子:96
专家分:36
注 册:2018-6-16
得分:0 
回复 2楼 rjsp
谢谢,我现在明白了
2020-12-24 16:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504324-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.822043 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved