0 k thích
69 đã xem
trong Kiến thức CNPM bởi (240 điểm)

Em có bài tập là nhập vào tập tin bằng cách nhập qua tham số hàm main

Nhưng hiện tại code của em bị lỗi, nhưng em không biết lỗi ở đâu

void main(int argc, char *argv[])
{
     //Example : test1 input.txt output.txt
     //file input.txt chỉ có 1 kí tự 'z'
     if (argc != 3)
           printf("Tham so khong hop le\n");
     else
     {
           FILE *fin = fopen(argv[1], "rt");
           FILE *fout = fopen(argv[2], "wt");
           char g;
           char *p;
           while (!feof(fin))
           {
                   fscanf(fin, "%c", &g);
                   p = &g;
                   printf("%p\n",p);
                   fprintf(fout, "%p\n", p);
           }
           fcloseall();
     }
     getch();
}
 
Mong được mọi người giúp đỡ !
bởi (1.2k điểm)
Bạn debug thử lỗi ở dòng nào ... mình thấy đúng rồi mà ....

bạn fprintf(%p) là bạn ghi địa chỉ của p ra file .

1 Câu trả lời

0 k thích
bởi (3.2k điểm)

chào bạn, trước hết thì mình hướng dẫn bạn debug code với tham số command line:

- bạn click chuột phải vào project -> chọn Properties (hoặc chọn PROJECT từ thanh công cụ, chọn xxx Properties..., xxx là tên project của bạn), hiện ra một cửa sổ

- ở khung bên trái, chọn Configuration Properties -> Debugging, ở khung bên phải, dòng Command Arguments, nhập vào tham số bạn sẽ nhập lúc chạy nhưng bỏ đi tên file exe sẽ chạy, vd bình thường bạn nhập >> test1.exe in.txt out.txt thì bây giờ chỗ này bạn nhập vào là in.txt out.txt, chọn OK

như vậy bạn có thể đặt breakpoint và debug như bình thường

Tiếp theo, code của bạn có một số vấn đề ntn:

ở phiên bản VS mới (ở đây mình dùng 2013, không biết 2012 có bị ko), nó sẽ báo lỗi ở hàm fopen, để bỏ qua lỗi đó, bạn có thể sử dụng:

#define _CRT_SECURE_NO_WARNINGS
 
Vấn đề thứ 2 là vòng lặp của bạn sẽ làm cho chương trình đọc kí tự cuối cùng của file tới 2 lần, có thể xử lý như sau:
while (1)
{
fscanf(fin, "%c", &g);
if (feof(fin))
break;
p = &g;
printf("%c", *p);
fprintf(fout, "%c", *p);
}

code này mình đã sửa một chút để nó ghi ra file out.txt có nội dung đúng hoàn toàn với file in.txt, code của bạn là bạn in ra địa chỉ của p, chứ ko phải giá trị của p

Thứ 3, nếu hàm fcloseall() báo lỗi thì hãy dùng _fcloseall()

Chào mừng đến với Q&A FIT. Bạn có thể đặt câu hỏi và nhận được câu trả lời từ các bộ phận hỗ trợ và những thành viên khác tại Khoa Công nghệ Thông tin, Trường Đại học Khoa học Tự nhiên, Đại học Quốc gia TP.HCM. Bạn hãy đăng nhập bằng tài khoản Google để gửi hoặc trả lời các câu hỏi.
...