我在这里遇到了一个新问题。我正在尝试编译一个 C 文件,其中有一个部分使用 FILE 结构中的 _ptr 指针从文件“users.txt”中读取信息。主要问题是当我尝试编译文件时,我在终端中遇到了下一个错误:错误:'FILE'没有名为'_ptr'的成员,而我得到的错误是:make:*** [ Makefile:16: main.o] 错误 1
这是Makefile:
ASM_SOURCE = functions.asm
C_SOURCE = main.c
OBJ_FILES = main.o functions.o
EXEC_RELEASE = main_release.bin
EXEC_DEBUG = main_debug.bin
release: $(OBJ_FILES)
gcc -o $(EXEC_RELEASE) $(OBJ_FILES)
debug: $(OBJ_FILES)
gcc -g -o $(EXEC_DEBUG) $(OBJ_FILES)
main.o: $(C_SOURCE)
gcc -c $(C_SOURCE)
functions.o: $(ASM_SOURCE)
nasm -f elf64 -o functions.o $(ASM_SOURCE)
clean:
rm -f $(OBJ_FILES) $(OBJ_FILES) $(EXEC_DEBUG)
这是我尝试在 C 文件中运行的部分: 请忽略用西班牙语写的文字,我正在和朋友一起编码。
// Include section on the top of the file
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
// main part of the file
users = calloc(5, sizeof(char*)); // Creando espacio para los usuarios
flag = LECTURA_INCOMPLETA; // Asignando la bandera a 0
i = 0; // Rastrear el valor del buffer main
while(1)
{
// Apuntar al primer char
linea = file.f1 -> _ptr;
n = 0; // Definiendo el valor de estos en 0
//CONTAR HASTA QUE ENCUENTRE UN SALTO DE LINEA, FIN DE LINEA, O QUE YA ENCONTR� EL ULTIMO CARACATER DEL ARCHIVO
while(linea[n] != '\n' && linea[n] != '\0' && (linea+n+1) != fin)
{
n++;
}
n+=1;
bufferAuxiliar = calloc(n, sizeof(char));
users[i] = calloc(n, sizeof(char)); // Creando espacio en la posici�n i con n longitud de chars
//COPIAR CARACTER POR CARACTER con FGETC, SE PODRIA USAR FGETS
for(j = 0; j < n; j++)
{
bufferAuxiliar[j] = fgetc(file.f1);
users[i][j] = bufferAuxiliar[j]; // Copiando cada char de bufferAuxiliar en Base de datos
//CAMBIAR SALTO DE LINEA POR CARACATER VACIO PARA IMPRESION
if(bufferAuxiliar[j]=='\n')
{
bufferAuxiliar[j] = '\0';
}
if(bufferAuxiliar[j] == EOF)
{
//INDICAR QUE YA SE LLEGO AL FINAL DEL ARCHIVO
flag = LECTURA_COMPLETA;
//SUSTITUIR EOF POR CARACTER VACIO PARA IMPRESION
bufferAuxiliar[j] = '\0';
}
}
i++; // Limpiando archivo
free(bufferAuxiliar); // Limpiando buffer auxiliar
//TERMINAR DE LEER LINEAS EN EL ARCHIVO
if(flag == LECTURA_COMPLETA)
{
return users; // Retorno de la informaci�n
}
}
}
else
{
return 0; // fail
}
}
else
{
return 0; // fail
}
希望大家能帮助我,我将不胜感激。
我尝试在终端中出现错误的 Makefile 行上使用命令 -l 和 -L。 示例:
C_SOURCE = main.c
main.o: $(C_SOURCE)
gcc -L stdio. h-c $(C_SOURCE)
FILE
是一种不透明类型:这意味着您无法可移植地取消引用 FILE *
并访问其成员。结构内容未记录,因此尝试访问没有意义file.f1 -> _ptr
。