【发布时间】:2015-05-05 23:30:30
【问题描述】:
嗨,我不知道如何在 C 中模拟我自己的 Cat 函数,我知道当没有设置参数并且我已经得到它时它是如何工作的,但我的问题是当我试图打开一个文件然后打印自己时...
到目前为止我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
int main(int argc, char* argv[])
{
char *a1 = (char*) malloc (sizeof(char));
int sz, fd,cont=0, cont1=0;
char *b1 = (char*) malloc (sizeof(char));
//char *a2 = (char*) malloc (sizeof(char));
char * a2;
char *b2 = (char*) malloc (sizeof(char));
// NO PARAMETERS
while (argc == 1){
sz=read(0, a1, 1);
b1[cont]=a1[0];
if(b1[cont]=='\n'){
write(1,b1,cont);
write(1,"\n",1);
b1=NULL;
}
cont=cont+1;
b1=(char*) realloc(b1, sizeof(char)*cont);
}
// 1 PARAMETER (FILE) /*Here is the problem*/
if (argc > 1){
fd=open(argv[1],O_RDONLY);
a2=fgetc(fd);
while (a2 != EOF){
b2[cont1]=a2;
cont1=cont1+1;
b2=(char*) realloc (b2, sizeof(char)*cont1+1);
a2=fgetc(fd);
}
write(1,b2,cont);
b2=NULL;
close(fd);
}
return 0;
}
我该怎么办?
【问题讨论】:
-
请更具体地说明您遇到的问题。究竟是什么破坏了?
-
它给我看这个...
o2.c:34:3: warning: passing argument 1 of ‘fgetc’ makes pointer from integer without a cast [enabled by default] a2=fgetc(fd); ^ ejercicio_evaluado2.c:34:5: warning: assignment makes pointer from integer without a cast [enabled by default] a2=fgetc(fd); ^ ejercicio_evaluado2.c:35:13: warning: comparison between pointer and integer [enabled by default] while (a2 != EOF){ -
检查
open是否成功。fgetc返回一个int,而不是char*,并期望FILE*作为参数,而不是int,使用fopen或不使用fgetc。 -
没问题 @RetiredNinja 但是,我猜我需要 fgetc 才能使用 EOF
-
你可以使用任何你喜欢的东西,但是你使用它不正确,因为警告显示你。