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; }
}

プログラムが以前は動作しなかった可能性があります。

于 2012-04-07T04:38:27.427 に答える