-
24-03-2015, 03:55 PM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Xin hỏi lỗi này là của VC hay là do đâu
Em có viết thử 1 chương trình rất đơn giản
Chương trình chỉ đọc từ file input.txt
8 số nguyên 8 bit dạng hexa và cho hiển thị trên màn hình
Với code như sau
Mã:#include <stdio.h> #include <conio.h> int main(void) { FILE *f; unsigned char i, ucG[8]; f=fopen("input.txt", "rt"); for(i=0; i<8; ++i) { fscanf(f, "%02X", &ucG[i]); printf("%02X ", ucG[i]); } fclose(f); getch(); return 0; }
nhưng khi kết thúc chương trình thì chương trình bị crash
Tuy nhiên cùng chương trình đó khi build dùng chế độ debug thì chương trình chạy sai và không bị crash
mấy số 0 cuối cùng kia ở đâu ra.
Cũng với chương trình đó
Khi mình sửa tên biến ucG[8] thành uc[8] thì khi build ở chế độ release và dubug kết quả như nhau
Mã:#include <stdio.h> #include <conio.h> int main(void) { FILE *f; unsigned char i, uc[8]; f=fopen("input.txt", "rt"); for(i=0; i<8; ++i) { fscanf(f, "%02X", &uc[i]); printf("%02X ", uc[i]); } fclose(f); getch(); return 0; }
Mình đính kèm cả 2 project mình thử với VC 6
Mọi người xem giúp mình xem lỗi ở đâu
Thanks.
TestVC6.rarTestVC6_2.rar
============================
Nội dung của file input.txt như sau
Mã:11 22 33 44 55 66 77 88
View more random threads:
- Điên đầu với Abstrac/Concrete
- Code xuất file từ resource dll, lỗi: xuất ra 1 file mà nó chẳng có gì cả
- Config Visual studio để chạy OpenCV với FFMPEG??
- Cách lưu file text với encoding Unicode?
- Xử lý TreeView trong Visual C++
- Hỏi về DLL
- Sửa lỗi khi thừa kế phương thức virtual
- Đọc File Excell ???
- EQU trong ASM có ý nghĩa gì?
- Vòng lặp While trong BUTTON??
-
24-03-2015, 04:14 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Lỗi do người viết đó, ko phải do trình dịch đâu, tên biến chả có gì liên quan ở đây hết :|
ucG[i] có kiểu unsigned char mà lại scanf %02X cho kiểu unsigned int.
thế là chết luôn cái stack
-
24-03-2015, 04:30 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi greigaz
Tại sao khi đổi tên biến nó lại ra kết quả khác so với không đổi tên?
-
24-03-2015, 04:34 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
tốt nhất là đổi uc về kiểu unsigned int, ko thì scanf vào 1 biến tạm rồi gán lại sau.
còn cái crash hay k chắc là do ăn may [IMG]images/smilies/laughing.gif[/IMG]
-
24-03-2015, 04:38 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi greigaz
Lý do ăn may nghe có vẻ không hợp lý cho lắm.
-
24-03-2015, 04:51 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
^
với scanf thì không.
mà dùng unsigned char làm gì? nếu là vấn đề bộ nhớ thì bỏ đi.
vừa thử lại xong, VC6 xuất ra 2 file exe giống hệt nhau cho cả 2 đoạn và đều crash như nhau.
-
24-03-2015, 04:56 PM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi greigaz
So sánh CRC32 hay MD5 chăng?
Chắc là giải quyết bằng cách nhập qua unsigned int rồi chuyển qua là dễ nhất.
Cảm ơn bác.
-
24-03-2015, 05:34 PM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi greigaz
Vấn đề là thớt viết 4 bytes vào chỗ chỉ có 1 byte.
(đọc thêm về kiểu dữ liệu của input http://www.cplusplus.com/reference/cstdio/scanf/ )
-
01-04-2015, 02:03 PM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
1 char chỉ có 1 kí tự làm sao mà bạn chép 2 kí tự 1 vào 1char được thế.
bạn chép hết 1 dòng của file vào 1 string rồi dùng split() nó sẽ chia ra cho bạn 8 mảng char[2] chứ char[8] làm sao chép hết.
Vệ sinh cá nhân là một phần quan yếu của sức khỏe nam giới. Dùng dung dịch vệ sinh mỗi ngày mang lại nhiều ích, giúp loại bỏ vi khuẩn và vi sinh vật gây hại, giúp khu vực cơ quan sinh dục luôn sạch...
Gel vệ sinh cu, bạn trai có nên...