指针数组转置求助
#include <stdio.h>int main()
{
char* array = { "FishCFishC", "Five", "Star", "Good", "WoW" };
char* (*p) = &array;
int i, j;
for (i = 0; i < 5; i++)
{
printf("%s\n", *(*p + i));
}
printf("\n\n\n");
char b = { "FishCFishC", "Five", "Star", "Good", "WoW" };
char* (*p2) = &b;
for (i = 0; i < 5; i++)
{
int temp;
for (j=0; *(*(*p2 + i)+j)!='\0';j++)
{
temp = *(*(*p2 + i) + j);
*(*(*p2 + i) + j) = *(*(*p2 + j) + i);
*(*(*p2 + j) + i) = temp;
}
}
for (i = 0; i < 5; i++)
{
printf("%s\n", *(*p2 + i));
}
return 0;
}
先是打印指针数组中的字符串,单独运行第一段没有问题。第二段创建10*10二维数组保证转置后数组不越界,但是事与愿违,程序无法运行,报错(0x00BD521A 处(位于 ConsoleApplication87.c.exe 中)引发的异常: 0xC0000005: 读取位置 0x68736946 时发生访问冲突。),求大神DEBUG,小白知道可以直接打印来实现转置,但想尝试把原始数据更改。求助
本帖最后由 xieglt 于 2020-9-17 08:57 编辑
"FishCFishC" 有11个字符,已经越界了!编译居然能通过?
char* (*p2) = &b 是什么语法?不知道编译怎么能通过的?
我的理解是:
char *p = {NULL};
for(i = 0 ; i < 10 ; i++)
{
p = b;
}
本帖最后由 Cool_Breeze 于 2020-9-17 12:52 编辑
#include <stdio.h>
int main()
{
char* array = { "FishCFishC", "Five", "Star", "Good", "WoW" };
char** p = array;
int i, j;
for (i = 0; i < 5; i++)
{
printf("%s\n",*(p + i));
}
printf("\n\n\n");
p = array;
char b = { 0 };
char (*p2) = b;
for (i = 0; i < 5; i++)
{
for (j=0; *(*(p+i)+j)!='\0';j++)
{
printf("%c ",*(*(p+i)+j));
*(*(p2+j)+i) = *(*(p+i)+j);
}
putchar('\n');
}
printf("\n\n\n");
for (i = 0; i < 10; i++)
{
for (j=0; j<10; j++)
printf("%c ", *(*(p2 + i)+j));
putchar('\n');
}
return 0;
}
页:
[1]