搜索
bottom↓
回复: 5

求指教:C语言Const 二维字符串数组指针语法求地址的表达

[复制链接]

出0入0汤圆

发表于 2021-10-5 17:47:03 | 显示全部楼层 |阅读模式
本帖最后由 阿三 于 2021-10-5 17:52 编辑

上程序:
const u8 LCD_PRT_Type[8][8]= {
/*0*/{"TBD"},       
/*1*/{"MTP628"},
/*2*/{"MTP638"},
/*3*/{"MTP02C"},
/*4*/{"MTP02D"},
/*5*/{"MTP701K"},
/*6*/{"TBD"},
/*7*/{"Nothing!"}       
};

我想用一个同样的 const u8 的指针变量如何得到 {"MTP628"}这个字符串的首地址。我尝试了很多:
如:
const u8 *temp;
temp = &LCD_PRT_Type[1];
最后得出来的是--> “BD”。即得到的是{"TBD"}的第1个字符后的字符串。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入442汤圆

发表于 2021-10-5 18:30:05 来自手机 | 显示全部楼层
(1)最后一个串溢出了;
(2)你第2 行代码把&去掉就是ok的,否则不确定是什么;
(3)如果结果仍然不对,考虑升级c编译器了。其实按c规范,你的写法带&可能也是正确的(我记得有人关于指针数组取址操作专门查过规范)。gcc/vc等都是正确的。

出0入0汤圆

发表于 2021-10-5 19:07:07 | 显示全部楼层
const u8 LCD_PRT_Type[ ][9]= {
/*0*/{"TBD"},      
/*1*/{"MTP628"},
/*2*/{"MTP638"},
/*3*/{"MTP02C"},
/*4*/{"MTP02D"},
/*5*/{"MTP701K"},
/*6*/{"TBD"},
/*7*/{"Nothing!"}      
};

const u8 *temp;
temp = &LCD_PRT_Type[1];
这样才对。
楼上说的没错你最后一个Noting 字符串是9个字节。已经溢出了。

出0入0汤圆

 楼主| 发表于 2021-10-5 19:52:11 | 显示全部楼层
wye11083 发表于 2021-10-5 18:30
(1)最后一个串溢出了;
(2)你第2 行代码把&去掉就是ok的,否则不确定是什么;
(3)如果结果仍然不对, ...

感谢,解决了,还是对指针有些迷糊,学习了。

出0入8汤圆

发表于 2021-10-5 20:28:14 | 显示全部楼层
感觉是因为图省事,产生了未定义。
  1. temp = &LCD_PRT_Type[1][0];
复制代码

这样写,会保证从C89到C++17全兼容。

出10入0汤圆

发表于 2021-10-6 10:35:22 | 显示全部楼层
本帖最后由 goodjob2 于 2021-10-6 10:37 编辑

u8 *temp=&LCD_PRT_TYPE[1][0];
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 01:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表