|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
|
|