파일에서 특정 문자의 발생을 계산해야합니다. 검색을 수행하는 기능의 정의는 다음과 같습니다.
int countChar(int descriptor, char *charsearch);
컴파일러 시간에 다음 오류가 있습니다.
program.c: In function ‘main’:
program.c:14:89: warning: passing argument 1 of ‘countChar’ makes integer from pointer without a cast [-Wint-conversion]
printf("The character %s has been found %d times in the file %s.", argv[1], countChar(o_file, argv[1]), argv[2]);
program.c:4:19: note: expected ‘int’ but argument is of type ‘FILE *’
int countChar(int descriptor, char *charsearch);
programa.c: In function ‘countChar’:
programa.c:25:15: warning: comparison between pointer and integer
if ( leido == charsearch){
내 코드는 다음과 같습니다.
#include <stdio.h>
FILE *o_file;
int countChar(int descriptor, char *charsearch);
int main(int argc, char **argv){
FILE *o_file = fopen(argv[2], "r");
if (!o_file){
printf("Cannot open file %s.", argv[2]);
return 1;
}else{
printf("File %s open \n", argv[2]);
printf("Searching for %s ...\n", argv[1]);
printf("The character %s has been found %d times in the file %s.", argv[1], countChar(o_file, argv[1]), argv[2]);
}
fclose(o_file);
printf("File %s closed", argv[2]);
}
int countChar(int descriptor, char *charsearch){
int counting = 0;
do {
int leido = fgetc(o_file);
if (leido != EOF){
if ( leido == charsearch){
counting ++;
}
}
} while (!feof(o_file));
return counting;
}
FILE*
포인터는 파일 스트림, 파일 기술자가 아니다. FILE*
함수 선언과 호환되지 않습니다. 특히 함수가 어쨌든 입력으로 받는 시스템 함수를 호출하기 때문에 첫 번째 매개 변수에서 FILE*
대신 a를 사용 하도록 함수를 변경하십시오 .int
FILE*
또한 문자열이 아닌 단일 문자 만 검색하므로 두 번째 매개 변수를에서 char*
로 변경해야 char
합니다.
#include <stdio.h>
int countChar(FILE* f, char charsearch);
int main(int argc, char **argv){
FILE *o_file = fopen(argv[2], "r");
if (!o_file){
printf("Cannot open file %s.", argv[2]);
return 1;
}
printf("File %s open \n", argv[2]);
printf("Searching for %s ...\n", argv[1]);
printf("The character %c has been found %d times in the file %s.", argv[1][0], countChar(o_file, argv[1][0]), argv[2]);
fclose(o_file);
printf("File %s closed", argv[2]);
}
int countChar(FILE *f, char charsearch){
int counting = 0;
do {
int leido = fgetc(f);
if (leido != EOF){
if (leido == charsearch){
++counting;
}
}
} while (!feof(f));
return counting;
}
이 함수의 서명을 변경할 수 없습니다하는 경우에, 당신은 사용할 필요가 open()
대신 fopen()
하고, read()
대신 fgetc()
. 또한 char*
루프 비교 중 역 참조 :
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int countChar(int descriptor, char* charsearch);
int main(int argc, char **argv){
int fd = open(argv[2], O_RDONLY);
if (fd == -1){
printf("Cannot open file %s.", argv[2]);
return 1;
}
printf("File %s open \n", argv[2]);
printf("Searching for %s ...\n", argv[1]);
printf("The character %s has been found %d times in the file %s.", argv[1], countChar(fd, argv[1]), argv[2]);
close(fd);
printf("File %s closed", argv[2]);
}
int countChar(int descriptor, char* charsearch){
int counting = 0;
char leido;
while (read(descriptor, &leido, 1) == 1){
if (leido == *charsearch){
++counting;
}
}
return counting;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다