Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        3年前关闭。
                                                                                            
                
        
typedef struct

{

    char janeiro[31];
    char *fevereiro;
    char marco[31];
    char abril[30];
    char maio[31];
    char junho[30];
    char julho[31];
    char agosto[31];
    char setembro[30];
    char outubro[31];
    char novembro[30];
    char dezembro[31];

    int mesSize[12] = { 31, 28, 31, 30, 31 , 30, 31, 31, 30 , 31, 30, 31 };
    char *meses[12]={ janeiro, fevereiro, marco, abril, maio, junho, julho, agosto, setembro, outubro, novembro, dezembro };

} MESES;


int n_diasK(MESES *mes)

{
    int i, j, counter=0;

    for (i = 0; i < 12; i++)
    {


        for(j = 0; j < (mes->mesSize[i]) ; j++){

            if (i == 1)
            {
                if (mes->fevereiro[j] == 'K');
                counter++;

            }

            else if (mes->meses[i][j] == 'K' )
                counter++;

        }


    }

    return counter;

}

void menu()
{

  MESES mes;

  randLetters(year,&mes);

  n_diasK(&mes);

}


好的,这是真实程序的相关部分,基本上该程序的作用是要求用户选择年份,然后在randLetters()函数中为每个月的每一天分配一个随机字母,然后必须找到字母“ K”有多少天。在结构中,char * fevereiro(february)是指针而不是数组,因为我需要计算need年。我上面发布的代码有效,但是我必须在2月if(mes->fevereiro[j] == 'K')中包含一个特殊情况,因为如果在没有此检查的情况下运行for循环,则在到达mes->meses[1][j] == 'K'时会崩溃。

最佳答案

我相信问题在于此分配:

  char *2Darray[2]={somearray, somepointer};


somepointer的整个生命周期中,行为均不符合您的预期。

也就是说,当您分配内存,然后让somepointer指向该内存时,2Darray[1]仍然是一个char *,它指向其他位置。 somepointer保持/指向结构初始化时的任何值将是2Darray[1]中的值。

07-23 22:34