cuốn sách gpt4 ai đã làm

Sự cố với fprintf

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 08:25:26 hai mươi bốn 4
mua khóa gpt4 Nike

Tôi đang cố gắng viết mã mô phỏng quá trình quét chống vi-rút, quét 5 tệp cụ thể và sau đó tạo một tệp có tên Chống vi-rútLog.txt tài liệu. Trong tập tin này nó ghi kết quả như PSY.avi bị nhiễm trùng. Các tập tin bị nhiễm là các tập tin bao gồm dấu hiệu youtube chuỗi trong tập tin.

Vấn đề của tôi là khi tôi cố in kết quả ra một tệp Chống vi-rútLog.txt , nó không in gì và để trống tập tin.

Mã của tôi:

#include
#include
#include
#include
#defineBUZZ_SIZE 1024
int fast_scan(char *fname, char *str, FILE *fs);
int Slow_scan(char *fname, char *str, FILE *fs);
int main(int argc, char *argv[])
{
tên char[100];
lựa chọn char[5];
buff char[BUZZ_SIZE];
TẬP TIN *f7, *f2;
struct dirent *de;
TRỰC TIẾP *dr = opendir(argv[1]);
if (dr == NULL) // opendir trả về NULL nếu không thể mở thư mục
{
printf("Không thể mở thư mục hiện tại");
return 0;
}
f2 = fopen(argv[2], "rb");
f7 = fopen("AntiVirusLog.txt", "wt");
printf("Chào mừng bạn đến với chương trình Chống vi-rút của Amnon\n bạn muốn chọn chế độ quét nào?:\n");
printf("Nhanh: chỉ kiểm tra 20% đầu tiên và 20% cuối cùng của tệp\n Chậm: Kiểm tra toàn bộ tệp\n");
printf("Nhập nhanh để quét nhanh và nhập chậm để quét chậm\n");
scanf("%s", lựa chọn);
if ((strcmp(lựa chọn, "chậm"))==0)
{
trong khi ((de = readdir(dr)) != NULL)
{
strcpy(tên, argv[1]);
strcat(tên, de->d_name);
if((fgets(buff, BUZZ_SIZE, f2)) != NULL)
{
Slow_scan(tên, buff, f7);
}
}
}
if ((strcmp(lựa chọn, "nhanh")) == 0)
{
trong khi ((de = readdir(dr)) != NULL)
{
strcpy(tên, argv[1]);
strcat(tên, de->d_name);
if ((fgets(buff, BUZZ_SIZE, f2)) != NULL)
{
fast_scan(tên, buff, f7);
}
}
}
printf("Quét thành công, kiểm tra file AntiVirusLog.txt để xem kết quả\n");
đã đóng(dr);
fclose(f2);
fclose(f7);
hệ thống ("TẠM DỪNG");
trở về (0);
}
int Slow_scan(char *fname, char *str, FILE *fs)
{
int tìm thấy = 0;
TẬP TIN *fp;
nhiệt độ char[BUZZ_SIZE];
if ((fopen_s(&fp, fname, "rb")) != NULL)
{
trở lại (-1);
}
while ((fgets(temp, BUZZ_SIZE, fp)) != NULL)
{
if ((strstr(temp, str)) != NULL)
{
fprintf(fs, "%s INFECTED\n", fname);
tìm thấy++;
}
}
nếu (tìm==0)
{
fprintf(fs, "%s KHÔNG BỊ NHIỄM\n", fname);
}
fclose(fp);
return(0);
}
int fast_scan(char *fname, char *str, FILE *fs)
{
int findres=0;
int i, j, len, partlen;
TẬP TIN *fp;
if ((fopen_s(&fp, fname, "rb")) != NULL)
{
trở lại (-1);
}
fseek(fp, 0, SEEK_END);
len = ftell(fp);
partlen = (len * 20)/100;
char *temp=malloc(partlen);
while ((fgets(temp, BUZZ_SIZE, fp)) != NULL)
{
for (i = 0; i < partlen; i++)
{
nếu (temp[i]=str[i])
{
tìm thấy++;
}
nếu (temp[i] != str[i])
{
i = partlen + 1;
}
if (tìm == partlen)
{
fprintf(fs, "%s INFECTED\n", fname);
i = partlen + 1;
}
}
for (j = len - partlen; j < len; j++)
{
nếu (temp[j] = str[j])
{
tìm thấy++;
}
nếu (temp[j] != str[j])
{
j = partlen + 1;
}
if (tìm == partlen)
{
fprintf(fs, "%s INFECTED\n", fname);
j = partlen + 1;
}
}
}
if (tìm thấy!= partlen)
{
fprintf(fs, "%s KHÔNG BỊ NHIỄM\n", fname);
}
fclose(fp);
return(0);
}

câu trả lời hay nhất

Có hai vấn đề chính với mã của bạn

  • Điểm 1:Trong mã của bạn, đối với một loạt cuộc gọi như

     search_sign(argv[1], buff, f7);

    Bạn đang sử dụng chưa được khởi tạo đánh bóng. đánh bóng sau đó như search_sign() Đối số thứ hai được thông qua, (được chấp nhận là str) lại được sử dụng làm chuỗi tìm kiếm trong strstr() .

    由于đánh bóng 是一个tự động Do đó, các biến cục bộ, nội dung (giá trị) ban đầu là rác (không xác định) khi được sử dụng làmkhóa tìm kiếm trong strstr(), sẽ gọi hành vi không xác định .

  • Điểm 2:Tức là,như bình luận trước đây của tôi , bạn phải luôn kiểm tra trước khi sử dụng thêm con trỏ tệp được trả về fopen() Liệu cuộc gọi có thành công hay không.

Có thắc mắc về c - fprintf, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/30729237/

hai mươi bốn 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress