【问题标题】:Having trouble with struct pointers结构指针有问题
【发布时间】:2014-02-06 18:10:11
【问题描述】:

我在尝试编译以下代码时遇到了问题:

#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。

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

【问题讨论】:

  • 你不能像这样分配数组的内容。使用其中一种复制功能。

标签: c pointers netbeans struct


【解决方案1】:

您需要执行strdup 或strcpy 或strncpy... - 否则您将指针(已分配空间)指向一个新位置,这可能不是您的想法.

【讨论】:

  • 我还以为是指针问题(我有很多这样的问题!),感谢您直接明确的回答,我忘记了关于字符串的那个细节。
  • 我们都做到了……编译器测试这些东西是一件好事。此外,我建议始终在启用最大警告级别的情况下进行编译,并继续修复代码直到它“干净”。它将为您省去路上的麻烦。很高兴您发现它有帮助。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    相关资源
    最近更新 更多