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