有结构指针的问题

时间:2014-02-06 18:10:12

标签: c pointers netbeans struct

我在尝试编译以下代码时遇到了麻烦:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Aposta{
   char apostador[100];
   char time1[100];
   char time2[100];
   char time3[100];
}Apostas;

typedef struct Jogos{
   char time1[100];
   int gol1;
   char time2[100];
   int gol2;
   int faltas;
   int amarelo;
   int vermelho;    
}Jogo;

typedef struct Times{
   char time[100];
}Time;

typedef struct Tbela{
   char time[100];
   int pontos;
   int ngole;
   int ngols;
}Tabela;

Tabela *ptTabela(Time *time, Jogo *jogo, int tamt, int tamj){
   int i=0;
   Tabela *tabela;
   tabela = (Tabela *)malloc((tamt)*(sizeof(Tabela)));
   while (i < tamt){
      tabela[i].pontos = 0;
      tabela[i].ngole = 0;
      tabela[i].ngols = 0;
      int l;
      for (l=0; l < tamj; l++){
         if(!(strcmp(time[i].time, jogo[l].time1 ))){
            tabela[i].time = jogo[l].time1;
            if(jogo[l].gol1 > jogo[l].gol2){
               tabela[i].pontos = (tabela[i].pontos + 3);
            }
            if(jogo[l].gol1 = jogo[l].gol2){
               tabela[i].pontos = (tabela[i].pontos + 1);
            }
            tabela[i].ngole = tabela[i].ngole + jogo[l].gol1;
            tabela[i].ngols = tabela[i].ngols + jogo[l].gol2;
         }
         else if(!(strcmp(time[i].time, jogo[l].time2 ))){
            tabela[i].time = jogo[l].time2;
            if(jogo[l].gol2 > jogo[l].gol1){
               tabela[i].pontos = (tabela[i].pontos + 3);
            }
            if(jogo[l].gol1 = jogo[l].gol2){
               tabela[i].pontos = (tabela[i].pontos + 1);
            }
            tabela[i].ngole = tabela[i].ngole + jogo[l].gol2;
            tabela[i].ngols = tabela[i].ngols + jogo[l].gol1;
         }
         else{
            printf("Time %s not found.", time[i].time);
         }

      }
   }
   i++;
}

编译器说: enter image description here

我真的不知道它有什么问题,对我来说,它应该只是获取jogo[l].time1内的字符串并将其复制到tabela[i].time。看起来它们的类型完全相同。

我正在使用netbeans 7.2。

感谢您的耐心等待。如果有什么不清楚的地方,请告诉我,我会尽快纠正。

2 个答案:

答案 0 :(得分:1)

您需要执行strdupstrcpystrncpy ... - 否则您将指针(已分配空间)指向新位置,这可能是不是你的想法。

答案 1 :(得分:1)

tabela[i].time = jogo[l].time1;

time是一个char数组。您正在尝试为其分配不正确的字符串文字。您应该使用strcpy复制,例如

strcpy(tabela[i].time, jogo[l].time1);