我在尝试编译以下代码时遇到了麻烦:
#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++;
}
编译器说:
我真的不知道它有什么问题,对我来说,它应该只是获取jogo[l].time1
内的字符串并将其复制到tabela[i].time
。看起来它们的类型完全相同。
我正在使用netbeans 7.2。
感谢您的耐心等待。如果有什么不清楚的地方,请告诉我,我会尽快纠正。
答案 0 :(得分:1)
您需要执行strdup
或strcpy
或strncpy
... - 否则您将指针(已分配空间)指向新位置,这可能是不是你的想法。
答案 1 :(得分:1)
tabela[i].time = jogo[l].time1;
time
是一个char数组。您正在尝试为其分配不正确的字符串文字。您应该使用strcpy
复制,例如
strcpy(tabela[i].time, jogo[l].time1);