gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:11:17 24 4
gpt4 key购买 nike

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com