|
함수와 변수에 대해 잘 모르고 계시군요^^
fp1 = fopen("argv[1]","r");
a = atoi(argv[3]);
while(feof(fil_1)==0){
ch=fgetc(fil_1);
이 게 도대체 뭡니까?
도무지 어디에서부터 말씀을 드려야할지 난감합니다.
1.
함수 내부에서 변수를 사용할 수 있으려면 해당 변수는
- 해당 함수 내부에서 이미 선언/정의되었거나
- 해당 함수 정의 위치보다 앞선 위치에, 다른 함수들의 외부에, 선언/정의되어 있어야 합니다.
따라서, FILECOPY 함수 내부에 있는 a = atoi(argv[3]);의 argv는 사용할 수 없습니다.
2.
fp1 = fopen("argv[1]","r");에서
"argv[1]"는 현재 눈에 보이는 대로 argv[1]이 문자열입니다.
파일명이 argv[1]인 파일(dir 을 했을 때 argv[1]로 표시되는 파일)을 읽기 모드로 여는 것이 됨.
fp1 = fopen(argv[1],"r");에서는
argv[1]은 argv[1](포인터)이 가리키는 번지를 시작으로 해서 저장되어 있는 문자열을 뜻합니다.
즉, 겹따옴표로 묶으면 그 안에 들어간 것은 그 자체로 문자열이 됩니다.
3.
while(feof(fil_1)==0){
ch=fgetc(fil_1); 에서,
fil_1은 char fil_1[]로 선언/정의되어 있으므로 문자열입니다.
한편, feof, fgetc 함수는 매개변수로 FILE * (파일 포인터)를 취합니다.
bool FileCopy(char fil_1[],char fil_2[], int maxLineCount);
int main(int argc,char *argv[])
{
if(argc!=4){
printf("명령어 원본파일 복사파일 줄수 순서로 입력!\n");
return -1;
}
FileCopy(argv[1],argv[2],atoi(argv[3]));
return 0;
}
bool FileCopy(char fil_1[],char fil_2[], int maxLineCount)
{
int line_number=0;
char ch;
FILE *fp1,*fp2;
if((fp1=fopen(fil_1,"rb"))==NULL) return false;
if((fp2=fopen(fil_2,"wb"))==NULL){
fclose(fp1);
return false;
}
while(1){
ch=fgetc(fp1);
if(feof(fp1) && ch==EOF) break;
fputc(ch,fp2);
if(maxLineCount>0 && ch=='\n'){
if(++line_number==maxLineCount) break;
}
}
fclose(fp1);
fclose(fp2);
return true;
}
심종현 님이 쓰신 글 :
: #include<stdio.h>
: #include<stdlib.h>
:
: FILE *fp1,*fp2;
:
: int main(int argc,char *argv[])
: {
: if(argc!=4){
: printf("명령어 원본파일 복사파일 줄수 순서로 입력해!/n")
: return -1;
: }
: FILEOPEN_1();
: FILECOPY(fp1,fp2);
: FCLOSE();
: }
:
: void FILEOPEN_1(void)
: {
: fp1 = fopen("argv[1]","r");
: fp2 = fopen("argv[2]","w");
: }
:
: void FILECOPY(char fil_1[],char fil_2[])
: {
: int a,line_number;
: char ch;
:
: a = atoi(argv[3]);
: line_number=0;
:
: while(feof(fil_1)==0){
: ch=fgetc(fil_1);
: putchar(ch);
: if(ch=='\n'){
: line_number++;
: if(line_number==a)break;
: }
: fputc(ch,fil_2);
: }
:
: void FILECLOSE()
: {
: fclose(fp1);
: fclose(fp2);
: }
|