汽车行业工程师 发表于 2020-9-17 00:18:24

指针数组转置求助

#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:54:24

本帖最后由 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:51:07

本帖最后由 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]
查看完整版本: 指针数组转置求助