C - 带有结构数组的 printf 字符串

标签 c arrays struct

我是编程新手,经过搜索和搜索后,我得到了一些代码可以工作(部分),我可以创建一个结构,但无法打印字符串字段:/

#include <stdio.h>
#define MAX 100

struct vehiculos{
 float peso;
 int hora;
 char *id;
 int ferry;
};

void asignar(struct vehiculos llegada[MAX] ...) { // Here i have more parameters, but they are useless in this question...
  int id,i;
  i=0;
  while(!feof(input_file)){
    fscanf(input_file,"%f %d %s %d",&llegada[i].peso,&llegada[i].hora,id,&llegada[i].ferry);
    llegada[i].id = id;
    i++;
   }
}

int main(){

  struct vehiculos llegada[MAX];
  FILE *entrada;
  entrada = fopen("proy1.txt","r");
  asignar(llegada...);

return 0;
}

我的问题是,在“asignar”函数中一切正常,但如果我尝试在该函数之外打印车辆的 ID,它只会打印垃圾值,但是其他值(如比索、hora 和渡轮)会正确打印(在该函数之外)函数)

这有效:

void asignar(...){
  ...
  printf("%s", llegada[i].id);
  ...
}

这不起作用:

int main(){
  ...
  printf("%s", llegada[i].id);
  ...
}

而且我的编译器说代码中没有错误,所以我不知道这里有什么问题

有人可以帮助我吗?那就太好了,谢谢:)

最佳答案

在最好的情况下,你可能会得到一些随机垃圾。但是,您的程序很可能只会出现段错误:您的代码声明了 id,但没有为其分配空间。

您需要将其声明为 字符 ID[IDLEN] 但是,读取文件时获得的 id 是一个 char*,编译器在尝试将其分配给 llegada[i].id< 时会发出警告。/.

为此,您需要使用 string.h 库制作字符串副本。

以下代码有效。

#include <stdio.h>
#include <string.h>
#define MAX 100
#define IDLEN 80
struct vehiculos{
 float peso;
 int hora;
 char id[IDLEN];
 int ferry;
};

void asignar(struct vehiculos llegada[MAX], FILE* input_file) { // Here i have more parameters, but they are useless in this question...
  char id[IDLEN];
  int i;
  i=0;
  while(!feof(input_file)){
    fscanf(input_file,"%f %d %s %d",&llegada[i].peso,&llegada[i].hora,id,&llegada[i].ferry);
    strcpy(llegada[i].id , id);
    i++;
   }
}

int main(){

  struct vehiculos llegada[MAX];
  FILE *entrada;
  entrada = fopen("proy1.txt","r");
  asignar(llegada,entrada);
  printf("%s\n",llegada[0].id);

return 0;
}

关于C - 带有结构数组的 printf 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32383938/

相关文章:

file - go - 使用 struct 读取二进制文件

arrays - 如何在 Swift 中初始化包含枚举数组的结构数组?

java - 从外部应用程序的屏幕获取数据

c - 根据客户类型排队进出

javascript - 动态添加或减去子数组?

ios - __bridge_transfer 从 CFArrayRef 到 NSArray* - 元素也转移了吗?

arrays - 支持元素 0 到 n 的 < O(n) 求和查询的数据结构

c - 当计算能力给定底数和指数时变量的包装

C 结构中的内存错误

c++ - 在类定义中使用自定义结构