我是靠谱客的博主 活力板凳,最近开发中收集的这篇文章主要介绍动态建立二维字符数组存放字符串,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

动态实现二维字符数组存放字符串
思路:
首先建立一维数组,每个元素都是char*型,再给每一个元素分配它的指向,使每一个元素都指向一个一维的char数组。这就实现了动态二维字符数组

分析:程序第4行先建立row个char型元素的数组p,(可能有人问为啥返回值是char**?因为你一维数组的元素是char,char型变量的地址是char**),程序第6行有个+1,因为存放字符串多需要一个空间来存放’’字符。所以+1。
下面的memcpy函数是把a数组中的sizeof(char)
(column+1)个字节的数据复制给b。
p[0]的类型是char*,b的类型也是char*,所以能赋值。还可以使用memcpy函数。也能使用memset函数,在这篇博客底部。
注意:动态建立二维字符数组不能使用这种方式:
char (*p) [column+1]= (char(*)[column+1])malloc(sizeof(char) * row * (column+1));
至于为啥这里就不再赘述了,因为我试过,不行。
如果用一个char*型变量对p[i]赋值,编译会出现类型转换错误,我目前是不知道如何解决,我只会下面那一种方式,而且还比较好用,指针的指向可以随意指向。如果有大神知道如何解决,不妨评论源代码。谢谢!

    int row,column;
    char **p;
    cin>>row>>column;
    p = (char**)malloc(sizeof(char*) * row);//先分配行,p = new char*[row];这样写也行
    for(int i = 0; i < row; ++i)
        p[i] = new char[column+1];  //再分配列,注意这里是+1
        
    char *a = new char[column+1];
    char *b = new char[column+1];
    scanf("%s",a);
    memcpy(b,a,sizeof(char)*(column+1));    //a数组中的串复制给b数组
    p[0] = b;
    printf("%s",p[0]);      //这样就能实现串的转换,还可以使用memcpy函数,很实用


//    for(int i = 0; i < row; ++i)
//        free(p[i]);     //释放空间,先释放一维数组p[i]行占用的空间
//    free(p);            //再释放一维数组p占用的空间,释放顺序不能反,否则错误

使用memset函数:

//使用memset函数:
char *a = new char[column+1];
char *b = new char[column+1];
memset(a,0,sizeof(char)*(column+1));
for(int i = 0; i < column +1 ; ++i)
    printf("%d ",a[i]);

最后

以上就是活力板凳为你收集整理的动态建立二维字符数组存放字符串的全部内容,希望文章能够帮你解决动态建立二维字符数组存放字符串所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部