S1E23课后作业,关于越界访问
小甲鱼说这样写会造成越界访问:#include <stdio.h>
int main()
{
char *array = {"FishC", "Five", "Star", "Good", "Wow"};
char *(*p) = &array;
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if ((*p) == '\0')
{
break;
}
printf("%c ", (*p));
}
printf("\n");
}
return 0;
}
但我输出每一个下标,并没有越界的迹象:
#include <stdio.h>
int main()
{
char *array = {"FishC", "Five", "Star", "Good", "Wow"};
char *(*p) = &array;
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if ((*p) == '\0')
{
break;
}
// printf("%c ", (*p));
// 打印出下标
printf("[%d][%d] ", j, i);
}
printf("\n");
}
return 0;
}
/*
输出结果:
Process finished with exit code 0
*/
为什么呢? 对于这个程序,确实没问题,因为array中的字符串一个比一个短
但是这样的写法确实是有问题的,如果换一下array中字符串的顺序就出问题了
#include <stdio.h>
int main()
{
//char *array = {"FishC", "Five", "Star", "Good", "Wow"};
char *array = {"Wow", "Good", "Star", "Five", "FishC"};
char *(*p) = &array;
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if ((*p) == '\0')
{
break;
}
printf("%c ", (*p));
}
printf("\n");
}
return 0;
}
本帖最后由 jhq999 于 2022-9-11 19:52 编辑
楼上正解
页:
[1]