iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言如何动态分配二维字符串数组
  • 476
分享到

C语言如何动态分配二维字符串数组

2023-06-25 11:06:01 476人浏览 八月长安
摘要

这篇文章给大家分享的是有关C语言如何动态分配二维字符串数组的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。动态分配一个二维字符串数组(1) 分配可能不连续的内存申请char**pps8Output = (char

这篇文章给大家分享的是有关C语言如何动态分配二维字符串数组的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

动态分配一个二维字符串数组

C语言如何动态分配二维字符串数组

(1) 分配可能不连续的内存

申请

char**pps8Output = (char **) malloc(n * sizeof(char *));

对于pps8Output而言,它获得了一块动态分配的连续内存,这块连续的内存可以放n个char *指针。
下面为每一行malloc一次内存,这样分配的内存就不一定是连续的。

for (int i = 0; i < n; i++) {    pps8Output[i] = (char *) malloc(lens * sizeof(char));}

释放

本着先malloc的内存,后free的原则进行释放。

for (int i = 0; i < n; i++)     {        free(pps8Output[i]);    }    free(pps8Output);

该方法:
n行的字符串数组,每个都是malloc动态分配的,所以整个二维字符串数组的内存可能不连续。

完整demo:

#include<stdio.h>#include<stdlib.h>int main() {        int n = 3;    int lens = 10;        char**pps8Output = (char **) malloc(n * sizeof(char *));        ///< malloc    for (int i = 0; i < n; i++)     {        pps8Output[i] = (char *) malloc(lens * sizeof(char));        printf("pps8Output[%d] ptr:%p \r\n", i, pps8Output[i]);    }        ///< free    for (int i = 0; i < n; i++)     {        free(pps8Output[i]);    }    free(pps8Output);        return 0;}//deubg://pps8Output[0] ptr:0x5625f38782c0 //pps8Output[1] ptr:0x5625f38792f0 //pps8Output[2] ptr:0x5625f3879310

(2) 分配连续的内存

申请

char **pps8Output = (char **) malloc(n * sizeof(char *));
对于pps8Output而言,它获得了一块动态分配的连续内存,这块连续的内存可以放n个char *指针。
下面一次性malloc好全部的内存,然后计算每行的起始地址,我们通过下标访问 pps8Output与赋值。

pps8Output[0] = (char *) malloc(n * lens * sizeof(char));for (int i = 1; i < n; i++){    pps8Output[i] = pps8Output[0] + i * lens;}

释放

由于是一次malloc出来的,所以只需要一次free即可。

 free(pps8Output);

该方法:一次性malloc全部所需的内存,该分配方式属于连续的内存。

完整demo:

#include<stdio.h>#include<stdlib.h>int main() {        int n = 3;    int lens = 10;        char**pps8Output = (char **) malloc(n * sizeof(char *));        ///< malloc    pps8Output[0] = (char *) malloc(n * lens * sizeof(char));    for (int i = 1; i < n; i++)    {        pps8Output[i] = pps8Output[0] + i * lens;                printf("pps8Output[%d] ptr:%p\r\n", i, pps8Output[i]);    }        ///< free    free(pps8Output);        return 0;}//deubg://pps8Output[1] ptr:0x5591309b52ca//pps8Output[2] ptr:0x5591309b52d4

(3) 将二维字符串数组看成一维字符串数组

申请

char *ps8Output = (char *) malloc(n * lens * sizeof(char));
将二维字符串数组看做一维字符串数组,开始时一次性malloc全部所需要的内存,通过手工计算索引的方式来分配内存地址。

for (int i = 0; i < n; i++) {    for (int j = 0; j < lens; j++)     {        *(ps8Output + (i*lens) + j) = 'a'; ///< 以'a'为例进行赋值演示    }}

释放

由于是一次malloc出来的,所以只需要一次free即可。

 free(ps8Output );

该方法:
将二维字符串数组看做一维字符串数组。pps8Output 是一个字符串指针,ps8Output+1就是ps8Output的地址+1,每一行都有lens个元素,那么使用 lens*i表示跨过的元素个数。

完整demo:

#include<stdio.h>#include<stdlib.h>int main() {        int n = 3;    int lens = 10;        char *ps8Output = (char *) malloc(n * lens * sizeof(char));        ///< malloc    for (int i = 0; i < n; i++)     {           for (int j = 0; j < lens; j++)         {            *(ps8Output + (i*lens) + j) = 'a';                        printf("%p \r\n", (ps8Output + (i*lens) + j));        }    }        ///< free    free(ps8Output);        return 0;}//debug://0x5560bb0fb2a0 //0x5560bb0fb2a1 //0x5560bb0fb2a2 //0x5560bb0fb2a3 //0x5560bb0fb2a4 //0x5560bb0fb2a5 //0x5560bb0fb2a6 //0x5560bb0fb2a7 //0x5560bb0fb2a8 //0x5560bb0fb2a9 //0x5560bb0fb2aa //0x5560bb0fb2ab //0x5560bb0fb2ac //0x5560bb0fb2ad //0x5560bb0fb2ae //0x5560bb0fb2af //0x5560bb0fb2b0 //0x5560bb0fb2b1 //0x5560bb0fb2b2 //0x5560bb0fb2b3 //0x5560bb0fb2b4 //0x5560bb0fb2b5 //0x5560bb0fb2b6 //0x5560bb0fb2b7 //0x5560bb0fb2b8 //0x5560bb0fb2b9 //0x5560bb0fb2ba //0x5560bb0fb2bb //0x5560bb0fb2bc //0x5560bb0fb2bd

感谢各位的阅读!关于“C语言如何动态分配二维字符串数组”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: C语言如何动态分配二维字符串数组

本文链接: https://www.lsjlt.com/news/304091.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言如何动态分配二维字符串数组
    这篇文章给大家分享的是有关C语言如何动态分配二维字符串数组的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。动态分配一个二维字符串数组(1) 分配可能不连续的内存申请char**pps8Output = (char ...
    99+
    2023-06-25
  • C语言动态分配二维字符串数组的方法
    目录动态分配一个二维字符串数组(1) 分配可能不连续的内存申请释放完整demo:(2) 分配连续的内存申请释放完整demo:(3) 将二维字符串数组看成一维字符串数组申请释放完整de...
    99+
    2024-04-02
  • c语言二维字符数组指针如何表示
    C语言中,可以通过使用指针数组来表示二维字符数组。指针数组是一个数组,其元素都是指针。对于一个二维字符数组,可以使用指针数组表示每一...
    99+
    2023-10-20
    c语言
  • C++中怎么动态分配二维数组
    C++中怎么动态分配二维数组,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在C++语言中动态的一维数组是通过malloc动态分配空间来实现的,动态的二维数组也可以通过mallo...
    99+
    2023-06-17
  • c语言二维动态数组怎么定义
    在C语言中,定义一个二维动态数组可以使用指针的指针来实现。下面是一个示例代码: #include #include int m...
    99+
    2023-10-27
    c语言
  • c语言如何给数组赋字符串
    在C语言中,可以通过以下两种方式给数组赋字符串: 使用字符数组进行赋值: char str[10]; // 声明一个长度为10的...
    99+
    2024-02-29
    c语言
  • c语言中二维字符数组怎么赋值
    在C语言中,可以通过循环遍历二维字符数组的每个元素,并为每个元素赋值。 以下是一个示例代码: #include <stdio....
    99+
    2024-02-29
    c语言
  • c语言二维字符串数组初始化的方法是什么
    C语言中,可以使用以下两种方法初始化一个二维字符串数组:1. 使用字符串字面量初始化:可以使用花括号将字符串字面量括起来,并用逗号分...
    99+
    2023-10-20
    C语言
  • php二维数组如何转换为字符串
    这篇文章主要介绍php二维数组如何转换为字符串,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php二维数组转换为字符串的方法:1、创建一个PHP示例文件;2、用implode将一维数组转换为用逗号连接的字符串;3、再...
    99+
    2023-06-21
  • c语言中字符串与字符串数组详解
    目录字符串字符串输出输入字符串字符串常用方法字符串数组总结字符串 用双引号引起来的就是字符串,字符串由字符组成 字符串使用%s格式化输出 字符串以\0结尾,...
    99+
    2024-04-02
  • C语言字符串替换:字符,字符串,字符数组详解
    在C语言中,字符串是由字符数组表示的。一个字符串是一个以null字符('\0')结尾的字符数组。字符替换:要替换字符串中的某个字符,...
    99+
    2023-08-15
    C语言
  • C语言字符串替换:字符,字符串,字符数组详解
    目录案例描述案例分析必备知识1,字符数组(1)字符数组的定义(2)字符数组的初始化2,字符串概念(1)字符串的概念(2)用字符初始化字符数组(3)获取字符串的长度3,字符串与指针4,...
    99+
    2024-04-02
  • C语言字符串数组详解
    C语言字符串数组 字符串是连续的字符序列,最后以空字符'\0'作为终止符。一个字符串的长度指所有字符的数量,但不包括终止符。在 C 语言中,没有字符串类型,自然也就没有运算符以字符串...
    99+
    2024-04-02
  • c语言如何把字符串转化为数组
    在C语言中,可以使用字符串的字符数组来表示字符串,因此可以将字符串转化为字符数组来达到将字符串转化为数组的目的。以下是一种常见的方法...
    99+
    2023-10-12
    c语言
  • C语言中怎么用一维数组存储字符串
    在C语言中,可以使用字符数组来存储字符串。一维字符数组可以用来存储单个字符串,也可以用来存储多个字符串。下面是一维数组存储单个字符串...
    99+
    2023-10-10
    c语言
  • C语言 动态分配数组案例详解
    目录一维动态数组的创建:二维数组的创建:很多人在编写C语言代码的时候很少使用动态数组,不管什么情况下通通使用静态数组的方法来解决,在当初学习C语言的时候我就是一个典型的例子,但是现在...
    99+
    2024-04-02
  • c语言如何把字符串变成数字
    在C语言中,可以使用`atoi()`和`atof()`函数将字符串转换为数字。 `atoi()`函数用于将字符串转换为整数。它的原...
    99+
    2023-10-28
    c语言
  • Go语言字符串如何转为数组
    本文小编为大家详细介绍“Go语言字符串如何转为数组”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言字符串如何转为数组”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。转换方法:1、用Fields()按空格分割...
    99+
    2023-07-04
  • C语言字符串数组怎么定义
    在C语言中,可以使用字符数组来表示字符串。字符串数组的定义方式有两种:1. 使用字符数组:可以通过声明一个字符数组来定义字符串数组。...
    99+
    2023-09-29
    C语言
  • c语言字符串数组怎么赋值
    在C语言中,字符串数组的赋值可以通过以下几种方式实现:1. 使用字符串常量直接赋值:```cchar str[] = "Hello,...
    99+
    2023-08-09
    c语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作