关于char ** 如何赋值

2023-11-13

前段时间遇到了个问题,需要返回二维字符串数组,每行单独输出字符串。

正常思路利用两个for循环挨个对每个字符进行赋值。如下

for(int i = 0; i < x; i++)
{
    for(int j = 0; j < y; j++)
    {
        char[i][j] = '*';
    }
}

毕竟用两个for循环,太麻烦我尝试可不可以一次性赋值字符串上去。于是有了以下代码

        char **date;                                      //定义了指向数值指针
        date = (char**)malloc(sizeof(char*)*5);           //申请内存
        for(int i = 0; i < 5; i++)                        //为每串字符申请内存
        {
                date[i] = (char*)malloc(sizeof(char)*5);
        }
        *(date+0) = "abcdefg";                            //尝试赋值字符串,大小超过申请空间
        printf("%s\n", date[0]);                          //打印结果  abcdefg
        printf("%c\n", date[0][1]);                       //打印结果  b
        //free(date[0]);                                //执行这段代码会报错  free():无效指针
        *(date+1) = "zzzzzzzz";                            
        printf("%s\n", date[1]);                         //打印结果   zzzzzzzz
        printf("%c\n", date[1][6]);                      //打印结果    z 
        printf("%s\n", date[2]);                         //打印字符为空 
        //free(date[1]);                                //执行这段代码会报错  free():无效指针
        free(date);                                      //可以执行

所以说这样子赋值还是不行的

char 的赋值方式有两种,一种是字符赋值,一种是字符串赋值;

字符赋值如  char a[] ={ 'x' };

这个时候a[]只占一个字节

字符串赋值如 char a[] = "abcd";

这个时候a[]占五个字节,因为字符串赋值会在最后面多加一个'\0'表示字符串结束

调试了很久,最后只能用strcpy函数来解决这个问题。算是可以少用一遍for循环了,而且方便

strcpy函数需要调用头文件

#include<stdlib.h>
strcpy(date[0], "xxxxx");

接上述代码这样用就没什么问题了,free也不会报错了;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于char ** 如何赋值 的相关文章

  • odoo 附件上传的三种姿势

    odoo 附件上传的三种姿势 因公司业务需要实现上传附件功能 一番折腾找到了三种附件上传的姿势 不过好像用处不大 1 下载 odoo 自带模块 在应用里搜索附件列出以及文档索引 安装模块即可 这样在编辑界面就可以看见附件上传按钮 上传即可
  • 使用微软官方工具MediaCreationTool制作Windows10的U盘系统安装盘

    需要重装系Windows10系统 这里介绍使用微软官方工具MediaCreationTool制作Windows10的U盘安装盘的步骤 1 点击链接https www microsoft com zh cn software download

随机推荐

  • [每日两题系列]刷算法题咯~~

    今日题目 最多能完成排序的块II 统计子矩阵 本系列所选题目均来自力扣或者牛客网站 所选题目主要是以其中的简单题为主 中等题为辅 包含少数困难题 原因是 本人目前能力还不够 开展这个系列的目的是督促自己 在暑假的时间里也要保持有一定的刷题量
  • Docker修改默认数据目录Docker Root Dir

    环境 Docker版本 19 03 12 OS版本 CentOS Linux release 7 7 1908 Core docker 默认数据目录 Docker Root Dir 是 var lib docker 可通过 docker i
  • 数组参数:交换数组中最大值和最小值的位置

    题目 定义一个函数 功能 实现数组中最大值和最小值交换位置 解题思路 定义一个数组参数的函数 首先要先找到数组元素中的最大值和最小值 然后用我们常用的方法来将最大值和最小值进行转换 最后在main函数中调用所定义的f函数 include
  • 【Python游戏】Python各大游戏合集(3):飞翔的小鸟、俄罗斯方块、24点小游戏、吃豆豆小游、扫雷

    相关文件 关注小编 私信小编领取哟 当然别忘了一件三连哟 公众号 Python日志 可以关注小编公众号 会不定时的发布一下Python小技巧 还有很多资源可以免费领取哟 源码领取 加Python学习交流群 773162165 可以领取哟 开
  • 前端面试题---框架篇

    Vue面试题 面试题 Vue2 x 生命周期有哪些 Vue生命周期总共可以分为8个阶段 创建前后 载入前后 更新前后 销毁前销毁后 以及一些特殊场景的生命周期 面试题 第一次进入组件或者页面 会执行哪些生命周期 beforeCreate c
  • 7.20黄金涨势是否会延续?今日如何布局

    近期有哪些消息面影响黄金走势 今日黄金多空该如何研判 黄金消息面解析 国际金价周四 7月20日 徘徊在1984美元 盎司附近 投资者继续押注近期公布的美国经济数据让美联储有理由暂停加息 金价上个交易日触及的5月24日以来新高1985 25美
  • python爬取支付宝基金数据_钱袋子往哪走?教你用Python爬取基金数据

    年关将至 钱袋子往哪走 有人买了定期存款 3年 年利率 3 987 按存50w计算 0 0385 50万 3年息 6万 月息 1666 72元0 039785 50万 3年息 6 21万 月息 1724 53元0 04125 50万 3年息
  • 跳跃游戏(两种详细解答)

    第一种 从前开始 class Solution public boolean canJump int nums 定义reach为能够到达的最远距离 int reach 0 for int i 0 i lt reach i temp表示在下标
  • java调用微信支付接口

    https github com binarywang weixin java pay demo pox xml引入依赖
  • 为何AI无法完全理解人类情感?GPT-4能否理解人类的情绪?

    在科幻小说和电影里 我们经常看到超级AI人工智能机器人可以理解 感知甚至模拟人类的情感 但在现实世界中 我们距离这个目标还有一段相当长的距离 即使是强大的GPT 4甚至未来的GPT 5 过高夸大AI的体验和性能 往往并不利于科技的发展 元宇
  • 华为OD流程走完了

    我机试题地址 传送门 huaweiOD机试题 机试过了后 华为上海部HR一面 耗时30分钟左右 问了些家庭 个人工作经历 包括结婚否 为什么辞职之类的 技术二面 同样 自我介绍结束后 问了些项目相关的细节 该环节完后 面试官共享其试题 限时
  • 猿创征文 |万字长文搞定企业中的mysql数据库部署及使用

    文章目录 Mysql 二进制安装及mycat 读写分离 1 学习环境 2 初始化环境 2 1 关闭selinux 防火墙 2 2 修改主机名 2 3 配置域名解析 2 4 时间同步 3 mysql 安装 3 1 二进制包上传服务器 3 2
  • winCE中实现虚拟串口的方法

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家拍砖 环境 wince6 0 ARM Freescell 一 目的 设计一个读GPS串口数据的驱动 并注册为COM口 二 实现过程 1 COM
  • CSS文字居中对齐学习

    CSS使用text align属性设置文字对齐方式 text align center 这样就设置了文字居中对齐
  • MDK编译生成的HEX、map与htm文件分析

    MDK编译生成的HEX map与htm文件分析 hex文件 Intel HEX文件是记录文本行的ASCII文本文件 在Intel HEX文件中 每一行是一个HEX记录 由十六进制数组成的机器码或者数据常量 Intel HEX文件经常被用于将
  • TCP报文段

    文章目录 什么是TCP TCP报文段 源端口号 目标端口号 序列号 Sequence number 确认号ack 数据偏移 首部长度 保留 8个标志 核心 窗口大小 校验和 可选项 填充 什么是TCP TCP是面向连接的 可靠的 基于字节流
  • Linux常用语法

    文章目录 第一章 Linux概述 第二章 Linux常用命令 第一讲 进入某个路径 第二讲 查看日志 VI 查看静态日志 tail watch 实时日志 tail 搭配使用参数 查看日志目标行 导出日志 查看当前路径下文件 按文件名查找文件
  • STM32定时器输入捕获

    STM32定时器输入捕获 用STM32F429做定时器捕获PWM波形 测出波形的周期 频率以及占空比 正向脉宽 基本原理 定时器的输入捕获主要是为了测量输入信号的频率 脉宽 占空比等信息 需要理解stm32定时器的基本结构 主要理解这些框起
  • object-c 入门基础篇

    大部分有一点其他平台开发基础的初学者看到XCode 第一感想是磨拳擦掌 看到Interface Builder之后 第一感想是跃跃欲试 而看到Objective C的语法 第一感想就变成就望而却步了 好吧 我是在说我自己 如果你和我一样 对
  • 关于char ** 如何赋值

    前段时间遇到了个问题 需要返回二维字符串数组 每行单独输出字符串 正常思路利用两个for循环挨个对每个字符进行赋值 如下 for int i 0 i lt x i for int j 0 j lt y j char i j 毕竟用两个for