0

gotoxy 包含在低级文件复制程序中的函数会产生错误。

这是代码

#include<stdio.h>
#include"d:\types.h"
#include"d:\stat.h"
#include"d:\fcntl.h"
#include<windows.h>

void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

main()
{
int inhandle,outhandle,bytes;
char buffer[512],source[128],target[128];
printf("enter source file location\n");
scanf("%s",source);
printf("enter target file name with location\n");
scanf("%s",target);
inhandle=(source,O_BINARY,O_RDONLY);
if(inhandle==-1)
{
printf("cannot open source file\n");
}
outhandle=(target,O_CREAT,O_BINARY|O_WRONLY,S_IWRITE);
if(outhandle==-1)
{
printf("cannot create target file");
}
 while(1)
{
bytes=read(inhandle,buffer,512);
if(bytes>1)
{
write(outhandle,buffer,bytes);
}
}
close(inhandle);
close(outhandle);
}

这是由 c-free ver5.0 编译器生成的错误列表

--------------------Configuration: mingw5 - CUI Debug, Builder Type: MinGW--------------------

Compiling D:\c\test4.c...
[Error] C:\PROGRA~2\C-FREE~1\mingw\include\stdlib.h:293: error: conflicting types for '_fmode'
[Error] d:\fcntl.h:107: error: previous declaration of '_fmode' was here
[Error] C:\PROGRA~2\C-FREE~1\mingw\include\stdlib.h:293: error: conflicting types for '_fmode'
[Error] d:\fcntl.h:107: error: previous declaration of '_fmode' was here
[Warning] D:\c\test4.c:43:2: warning: no newline at end of file

Complete Compile D:\c\test4.c: 4 error(s), 1 warning(s)

我究竟做错了什么?如何成功编译代码?

4

2 回答 2

1

fcntl.h您在(wtf?)中的副本d:\与系统标题的其余部分不匹配。不要像那样混合和匹配系统标头。

另外:gotoxy()是一个 lib(n)curses 函数;它在 Windows 上通常不可用。如果需要,您可能需要调查PDCurses

于 2012-04-06T21:32:35.623 回答
0

标题应该是

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#include <unistd.h>
#include <windows.h>

不要复制它们以使其工作。

当您遇到错误时,请处理例如

inhandle=open(source,O_BINARY,O_RDONLY);
if(inhandle==-1) { perror("cannot open source file\n");return -1;}
outhandle=open(target,O_CREAT|O_BINARY|O_WRONLY,S_IRWXU);
if(outhandle==-1) { perror("cannot create target file"); return -1;}

而while循环没有退出点。

while(bytes=read(inhandle,buffer,512),bytes>1) {
 if (write(outhandle,buffer,bytes) == -1) { perror("write");break; }
}

程序以前不可能工作,不是包含 gotoxy 打破了它。

于 2012-04-07T04:38:27.427 回答