C 全局变量的行为不符合预期

C 全局变量的行为不符合预期,c,C,这就是我试图解决的问题。(给定一个长度为2n的不同字符字符串,我必须以所有可能的方式将其分成两部分,而不重复分组) 我使用的方法是: 生成字符串的所有排列 存储可接受的置换(我生成“hauy”和“hayu”,但只存储其中一个) 检查新生成的排列与存储的排列,以过滤出重复的排列 印刷品 (我意识到可能有更好的方法) #包括 #包括 #包括 字符*b[100000000]; int-bSize=0; 作废打印(字符*a) { int k=strlen(a); printf(“M:”); for

这就是我试图解决的问题。(给定一个长度为2n的不同字符字符串,我必须以所有可能的方式将其分成两部分,而不重复分组)

我使用的方法是:

  • 生成字符串的所有排列
  • 存储可接受的置换(我生成“hauy”和“hayu”,但只存储其中一个)
  • 检查新生成的排列与存储的排列,以过滤出重复的排列
  • 印刷品
  • (我意识到可能有更好的方法)

    #包括
    #包括
    #包括
    字符*b[100000000];
    int-bSize=0;
    作废打印(字符*a)
    {   
    int k=strlen(a);
    printf(“M:”);
    
    for(int i=0;i
    b[bSize]=a;
    b[bSize]
    中存储
    a
    的值
    a
    是指向
    main
    中定义的数组
    a
    的第一个元素的指针。因此,您不存储单个字符串,只存储指向
    a
    的指针,并且该指针永远不会更改

    若要使用此算法,必须复制每个字符串。这需要更改
    b
    的定义方式以及字符串的比较方式。(不能将字符串与
    =
    进行比较)


    (但是,对于此任务,有一种更好的算法,它不需要生成所有排列。)

    b[bSize]=a;
    a
    的值存储在
    b[bSize]
    a
    是指向
    main
    中定义的数组
    a
    的第一个元素的指针。因此,您不存储单个字符串,只存储指向
    a
    的指针,并且该指针永远不会更改

    若要使用此算法,必须复制每个字符串。这需要更改
    b
    的定义方式以及字符串的比较方式。(不能将字符串与
    =
    进行比较)


    (不过,对于这项任务,有一种更好的算法,它不需要生成所有排列。)

    你不需要排列。当你说
    b[bSize]=a
    ,您将指向
    main
    a
    的第一个元素的指针存储在
    main
    中,并且始终是相同的数组--只有在您排列时其内容才会更改。您可以通过打印所有
    b[i]来验证这一点
    --始终是当前排列。如果要存储当前排列,必须制作一份副本。您不需要排列。当您说
    b[bSize]=a
    ,您将指向
    main
    a
    的第一个元素的指针存储在
    main
    中,并且始终是同一个数组--只有它的内容在您排列时会更改。您可以通过打印所有
    b[i]
    来验证这一点--它始终是当前排列。如果要存储当前排列,必须制作一份副本。