马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
小甲鱼说这样写会造成越界访问:#include <stdio.h>
int main()
{
char *array[5] = {"FishC", "Five", "Star", "Good", "Wow"};
char *(*p)[5] = &array;
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if ((*p)[j][i] == '\0')
{
break;
}
printf("%c ", (*p)[j][i]);
}
printf("\n");
}
return 0;
}
但我输出每一个下标,并没有越界的迹象:#include <stdio.h>
int main()
{
char *array[5] = {"FishC", "Five", "Star", "Good", "Wow"};
char *(*p)[5] = &array;
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if ((*p)[j][i] == '\0')
{
break;
}
// printf("%c ", (*p)[j][i]);
// 打印出下标
printf("[%d][%d] ", j, i);
}
printf("\n");
}
return 0;
}
/*
输出结果:
[0][0] [1][0] [2][0] [3][0] [4][0]
[0][1] [1][1] [2][1] [3][1] [4][1]
[0][2] [1][2] [2][2] [3][2] [4][2]
[0][3] [1][3] [2][3] [3][3]
[0][4]
Process finished with exit code 0
*/
为什么呢?
对于这个程序,确实没问题,因为array中的字符串一个比一个短
但是这样的写法确实是有问题的,如果换一下array中字符串的顺序就出问题了 #include <stdio.h>
int main()
{
//char *array[5] = {"FishC", "Five", "Star", "Good", "Wow"};
char *array[5] = {"Wow", "Good", "Star", "Five", "FishC"};
char *(*p)[5] = &array;
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if ((*p)[j][i] == '\0')
{
break;
}
printf("%c ", (*p)[j][i]);
}
printf("\n");
}
return 0;
}
|