还是原来的代码,改成 %ld 之后,什么警告都没有了,编译运行,都没问题啊,还是不清楚那个 *a[] 里应该 ...
uint8_t *a;
那么
*(a + 0)
*(a + 1)
*(a + 2)
*(a + 3)
.
.
.
*(a + 15)
*(a + 16) 哥斯拉不说话 发表于 2018-2-24 16:05
这是新换的 gcc
gcc 没有检查出这个问题
1>------ 已启动全部重新生成: 项目: tmp, 配置: Debug Win32 ------
1>main.c
1>c:\visualstudioprojects\tmp\tmp\main.c(14): warning C4789: 缓冲区“a”(大小为 68 字节)将溢出;4 字节将在偏移 96 时开始写入
1>c:\visualstudioprojects\tmp\tmp\main.c(15): warning C4789: 缓冲区“a”(大小为 68 字节)将溢出;4 字节将在偏移 128 时开始写入
1>c:\visualstudioprojects\tmp\tmp\main.c(16): warning C4789: 缓冲区“a”(大小为 68 字节)将溢出;4 字节将在偏移 160 时开始写入
1>c:\visualstudioprojects\tmp\tmp\main.c(17): warning C4789: 缓冲区“a”(大小为 68 字节)将溢出;4 字节将在偏移 192 时开始写入
1>tmp.vcxproj -> C:\VisualStudioProjects\tmp\Debug\tmp.exe
1>已完成生成项目“tmp.vcxproj”的操作。
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========
人造人 发表于 2018-2-24 16:07
uint8_t *a;
a是数组,数组里面有17个元素(0~16),每个元素都是一个指针,uint8_t类型的指针
{:10_250:} *(a+8) = (uint8_t *)"11111111";
*(a+16) = (uint8_t *)"22222222";
*(a+24) = (uint8_t *)"33333333";
*(a+32) = (uint8_t *)"44444444";
*(a+40) = (uint8_t *)"55555555";
*(a+48) = (uint8_t *)"66666666";
*(a+48) = (uint8_t *)"66666666";
是最大的一个 a + 48
那么
uint8_t *a; 人造人 发表于 2018-2-24 16:11
gcc 没有检查出这个问题
多谢了
页:
1
[2]