我是指针上的新手,我已经练习了从txt文件中获取信息的位置,然后将该信息放入结构中。无论如何,当我收到信息并调用de copyname()函数时,编译器似乎停止工作。我还检查了alumno [i] .nombreEst的实例是否已创建,并且它也崩溃了,因为编译器在打印它时什么都不做。如果你们中的任何人都知道我会成为什么样的原因
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
typedef struct{
char *nombreEst;
int nota;
}estudiantes;
estudiantes *alumno;
void copiarNombre(char info[], int i);
int main(int argc, char** argv) {
int n; //numero de registros que desea mostrar
char temp[50]; // cantidad maxima de caracteres por renglon
char info[50]; //variable que almacenara la informacion del archivo
int renglones; //cuenta la cantidad de renglones en el archivo
FILE *f;
f=fopen("registros.txt","r");
if (f==NULL){
cout << "no se ha podido abrir el archivo o no existe en la carpeta" << endl;
exit(1);
}
while (!feof(f)) { //Lee el contenido que se encuentra en el archivo. si retorna un valor distinto a 0 (por ejemplo cuando se acaba el archivo) se sale del while
fgets(temp, 50, f);
renglones++;
}
rewind(f); //retorna el lector del compilador que estaba en el ultimo renglon al primero
alumno = (estudiantes*)malloc(renglones*sizeof(estudiantes)); //crea el espacio de memoria de acuerdo a la cantidad de renglones(estudiantes) por el tamaño de 1 estudiante)
if (alumno == NULL){
cout << "no se ha podido reservar el espacio de memoria" << endl;
exit(1);
}
cout << "ingrese el numero de registros que desea mostrar"<< endl;
cin >> n;
while(n>=renglones || n<=0){
cout << "No Existen tantos registros. ingrese el numero de registros que desea mostrar"<< endl;
cin >> n;
}
for (int i=0; i<=n; i++){
char aux='0';
for (int j=0; aux !='-'; j++){
aux = fgetc(f);
if (aux != '-'){
info[j] = aux;
}
}
copiarNombre(info, i);
fgets (info, 4, f);
alumno[i].nota = atoi(info);
cout<< "Nombre: " << alumno[i].nombreEst << " Nota: " << alumno[i].nota << endl;
}
return 0;
}
void copiarNombre(char info[], int i){
int numCaracteres = strlen(info) + 1;
alumno[i].nombreEst = (char*)malloc(numCaracteres*sizeof(char));
if (alumno[i].nombreEst = NULL){
cout << "No se ha podido reservar memoria" << endl;
exit(1);
}
strcpy(alumno[i].nombreEst, info);