关于char ** 如何赋值

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

正常思路利用两个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也不会报错了;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

name =

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值