Lỗi kết thúc tệp tìm thấy trong c năm 2024

Lỗi ld returned 1 exit status là một lỗi rất hay gặp với các bạn mới học về lập trình C hoặc C++. Vậy cụ thể lỗi ld returned 1 exit status là gì? Nguyên nhân do đâu và cách sửa lỗi như thế nào? Hãy cùng tìm hiểu trong bài viết sau.

1. Nguyên nhân gây ra lỗi ld returned 1 exit status

Lỗi ld returned 1 exit status được hiểu đơn giản là ld trở lại trạng thái thoát. Thường xuất hiện khi chạy một đoạn code viết bằng ngôn ngữ lập trình C hoặc C++.

Nguyên nhân gây ra lỗi lập trình này gồm.

1.1. Do virus

Nguyên nhân phổ biến nhất gây ra lỗi ld returned 1 exit status là do virus hoặc phần mềm virus đã chặn không cho file .exe chạy trên máy.

1.2. Do máy đang chạy chương trình ngầm

Trong quá trình lập trình, nếu máy tính có chương khác đang chạy ngầm thì lỗi ld returned 1 exit status cũng có thể xảy ra.

1.3. Do lập trình gõ sai câu lệnh

Lập trình là một công việc khó, đòi hỏi sự tỉ mỉ cao. Vì thế, lỗi gõ sai câu lệnh rất hay gặp ở các bạn mới học. Hành động này cũng gây nên lỗi ld returned 1 exit status.

Ngoài ra lỗi ld returned cũng có thể do các nguyên nhân khác không thể xác định.

2. Cách khắc phục lỗi ld returned 1 exit status

Cách 1: Tìm và sửa lỗi gõ sai câu lệnh

Với các lập trình viên thì việc tự phải tìm ra lỗi gõ dev gần như là bắt buộc. Vì thế, ngay khi chạy thử và nhận thấy lỗi ld returned 1 exit status bạn phải đọc lại xem có câu lệnh nào bị sai không và sửa lại.

Ví dụ như ảnh dưới đây, hàm main đã bị gõ sai thành maint. Rất nhiều hàm lập trình dễ bị gọi sai và gõ nhầm như thế này. Bạn hãy gõ lại chính xác câu lệnh và chạy lại chương trình xem sao. Nếu lỗi vẫn còn thì hãy thử các cách khác.

Xem thêm: Lỗi this site can’t be reached [CÁCH XỬ LÝ]

Cách 2: Tìm và tắt những chương trình đang chạy ngầm

Nếu may mắn, một chương trình đang chạy ngầm có thể hiện ngay dưới thanh tác vụ của máy tính giống như hình.

Khi phát hiện một chương trình chạy ngầm như này. Bạn chỉ cần mở ứng dụng lên và tắt tab đang chạy là được.

Nếu không phát hiện ra chương trình nào đang chạy ngầm. Bạn thực hiện 1 theo các cách sau.

C1:

- Nhấn Ctrl + Alt + Delete

- Chọn “Task Manager”

- Trong tab Process hãy tìm ứng dụng đang chạy ngầm. Chọn “End task” để tắt chương trình đó đi.

C2:

- Nhấn “Ctrl + Shift + Esc

- Nhấn vào “Task Manager” trong tab “Process”

- Nhấn End Task tại ứng dụng đang chạy ngầm để tắt

Cách 3: Tắt phần mềm diệt virus trên máy

Một số phần mềm chặn virus có tính năng phát hiện ra các file .exe và xóa tệp đó đi.Vì thế, file bạn tạo ra cũng có thể bị chặn. Để khắc phục nguyên nhân này bạn làm như sau

- Một là tắt phần mềm diệt virus đi sau đó mới chạy file

- Hai là cho phép chạy file exe trong tab “Allow list” của phần mềm diệt virus.

Xem thêm: Tổng hợp phần mềm diệt virus tốt nhất [TOP 7]

Cách 4: Xóa phần mềm IDE Dev C++ rồi tải lại

Nếu không phát hiện ra nguyên nhân gây lỗi ld returned 1 exit status thì cách tốt nhất là bạn nên xóa phần mềm Dev C++ rồi tải lại. Vì đôi khi lỗi có thể do phần mềm C/C++ có vấn đề.

Xem thêm: Xampp là gì? Hướng dẫn sử dụng xampp

3. Lời kết

Ngôn ngữ lập trình C là một ngôn ngữ nền tảng khi học lập trình. Nếu nắm bắt được ngôn ngữ này bạn có thể học và sử dụng bất cứ ngôn ngữ lập trình nào khác trong thời gian ngắn. Vì thế biết cách sửa lỗi ld returned 1 exit status tuy đơn giản nhưng là một mẹo rất hữu ích. Chúc bạn thực hiện thành công.

Có rất nhiều hàm phục vụ cho công việc đọc ghi file trong C. Trong bài hướng dẫn này, Lập trình không khó sẽ hướng dẫn bạn cách để làm việc với file sử dụng ngôn ngữ lập trình C. Một số hàm đọc ghi file trong C có thể kể tới như là: fprintf[], fscanf[], fread[], fwrite[], fseek … và một số hàm khác nữa.

Nếu bạn đang tìm kiếm đọc ghi file trong C++, thì hãy đọc bài viết này nhé.

NỘI DUNG BÀI VIẾT

Tại sao chúng ta cần đến file?

  • Dữ liệu được lưu ở biến của chương trình, và nó sẽ biến mất khi chương trình kết thúc. Sử dụng file để lưu trữ dữ liệu cần thiết để đảm bảo dữ liệu của chúng ta không bị mất ngay cả khi chương trình của chúng ta ngừng chạy.
  • Nếu chương trình của bạn có đầu vào[input] là lớn, bạn sẽ rất vất vả nếu phải nhập mỗi khi chạy. Thay vào đó, hãy lưu vào file và chương trình của bạn sẽ tự đọc mỗi lần khởi chạy
  • Dễ dàng sao chép, di chuyển dữ liệu giữa các thiết bị với nhau

Các kiểu file

Trước khi bạn làm việc với file, bạn nên biết về 2 kiểu file khác nhau sau đây:

  1. File văn bản – text files
  2. File nhị phân – binary file

1. File văn bản – text files

File văn bản là file thường có đuôi là .txt. Những file này bạn có thể dễ dàng tạo ra bằng cách dùng các text editer thông dụng như Notepad, Notepad++, Sublime Text,…

Khi bạn mở các file này bằng các text editer nói trên, bạn sẽ thấy được văn bản ngay và có thể dễ dàng thao tác sửa, xóa, thêm nội dung của file này.

Kiểu file này thuận tiện cho chúng ta trong việc sử dụng hàng ngày, nhưng nó sẽ kém bảo mật và cần nhiều bộ nhớ để lưu trữ hơn.

2. File nhị phân – Binary files

File nhị phân thường có đuôi mở rộng là .bin

Thay vì lưu trữ dưới dạng văn bản thuần thúy, các file này được lưu dưới dạng nhị phân, chỉ bao gồm các số 0 và 1. Bạn cũng sẽ thấy các con số này nếu cố mở nó bằng 1 text editer kể trên.

Loại file này giúp lưu trữ được dữ liệu với kích thước lớn hơn, không thể đọc bằng các text editer thông thường và thông tin lưu trữ ở loại file được bảo mật hơn so với file văn bản.

Các thao tác với file

Trong ngôn ngữ lập trình C, có một số thao tác chính khi làm việc với file, bao gồm cả file văn bản và file nhị phân:

  1. Tạo mới một file
  2. Mở một file đã có
  3. Đóng file đang mở
  4. Đọc thông tin từ file/ Ghi thông tin ra file

Thao tác với file trên ngôn ngữ C

Khi làm việc với file, bạn cần khai báo 1 con trỏ kiểu

fptr = fopen["fileopen","mode"]

5. Việc khai báo này là cần thiết để có sự kết nối giữa chương trình của bạn và tập tin mà bạn cần thao tác.

FILE *fptr;

Thao tác mở file

Để đọc ghi file trong C cũng như trong mọi ngôn ngữ lập trình, việc đầu tiên bạn cần làm là mở file mà bạn muốn làm việc. Trong ngôn ngữ lập trình C, chúng ta có thể mở file bằng cách sử dụng hàm

fptr = fopen["fileopen","mode"]

6 trong thư viện

fptr = fopen["fileopen","mode"]

7 như sau:

fptr = fopen["fileopen","mode"]

Trong đó

fptr = fopen["fileopen","mode"]

8 là một tham số chúng ta cần chỉ định.

Ví dụ:

fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"];

  • Giả sử tập tin `newprogram.txt` chưa có trong thư mục `E:\cprogram`. Ví dụ đầu tiên với fptr = fopen["fileopen","mode"] 9 sẽ cho phép chương trình tự động tạo ra file `newprogram.txt` nếu nó chưa có. Và sau đó mở file này lên nhưng chương trình chỉ có thể ghi dữ liệu vào mà không thể đọc.
  • Mode là fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"]; 0 chỉ cho phép chương trình ghi[nếu đã có dữ liệu thì ghi đè] nội dung của file.
  • Với ví dụ thứ 2, mode là fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"]; 1 cho phép chương trình mở 1 file nhị phân đã có sẵn `oldprogram.bin`. Với trường hợp này, chương trình của bạn chỉ có thể đọc file và không thể ghi nội dung vào file.

Các tham số của “mode”

Dưới đây là các giá trị có thể có của tham số

fptr = fopen["fileopen","mode"]

8 nói trên:

Mode Ý nghĩa Nếu file không tồn tại r Mở file chỉ cho phép đọc Nếu file không tồn tại, fopen[] trả về NULL. rb Mở file chỉ cho phép đọc dưới dạng nhị phân. Nếu file không tồn tại, fopen[] trả về NULL. w Mở file chỉ cho phép ghi. Nếu file đã tồn tại, nội dung sẽ bị ghi đè. Nếu file không tồn tại, nó sẽ được tạo tự động. wb Open for writing in binary mode. Nếu file đã tồn tại, nội dung sẽ bị ghi đè. Nếu file không tồn tại, nó sẽ được tạo tự động. a Mở file ở chế độ ghi “append”. Tức là sẽ ghi vào cuối của nội dung đã có. Nếu file không tồn tại, nó sẽ được tạo tự động. ab Mở file ở chế độ ghi nhị phân “append”. Tức là sẽ ghi vào cuối của nội dung đã có. Nếu file không tồn tại, nó sẽ được tạo tự động. r+ Mở file cho phép cả đọc và ghi. Nếu file không tồn tại, fopen[] trả về NULL. rb+ Mở file cho phép cả đọc và ghi ở dạng nhị phân. Nếu file không tồn tại, fopen[] trả về NULL. w+ Mở file cho phép cả đọc và ghi. Nếu file đã tồn tại, nội dung sẽ bị ghi đè. Nếu file không tồn tại, nó sẽ được tạo tự động. wb+ Mở file cho phép cả đọc và ghi ở dạng nhị phân. Nếu file đã tồn tại, nội dung sẽ bị ghi đè. Nếu file không tồn tại, nó sẽ được tạo tự động. a+ Mở file cho phép đọc và ghi “append”. Nếu file không tồn tại, nó sẽ được tạo tự động. ab+ Mở file cho phép đọc và ghi “append” ở dạng nhị phân. Nếu file không tồn tại, nó sẽ được tạo tự động.

Thao tác đóng file

Khi làm việc với tập tin hoàn tất, kể cả là file nhị phân hay file văn bản. Bạn cần đóng file sau khi làm việc với nó xong.

Việc đóng file đang mở có thể được thực hiện bằng cách dùng hàm

fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"];

3.

fclose[fptr]; //Con trỏ FILE trỏ tới file cần được đóng. Chúng ta sẽ học cách đọc ghi file trong C với file văn bản trước. Với file nhị phân, bạn kéo xuống dưới để xem tiếp.

Để làm việc với file văn bản, chúng ta sẽ sử dụng

fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"];

4 và

fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"];

5.

VD1. Ghi file sử dụng fprintf[]

include

include

int main[] { int num; FILE *fptr; fptr = fopen["C:\program.txt","w"]; if[fptr == NULL] {

  printf["Error!"];     
  exit[1];               
} printf["Enter num: "]; scanf["%d",&num]; fprintf[fptr,"%d",num]; fclose[fptr]; return 0; }

Chương trình nhận số

fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"];

6 từ bàn phím và ghi vào file văn bản

fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"];

7.

Sau khi bạn chạy chương trình này, bạn sẽ thấy file văn bản

fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"];

7 được tạo mới trong ổ C trên máy tính bạn. Khi mở file này lên, bạn sẽ thấy số mà bạn vừa nhập cho biến

fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"];

6 kia.

VD2. Đọc file sử dụng fscanf[]

include

include

int main[] { int num; FILE *fptr; if [[fptr = fopen["C:\program.txt","r"]] == NULL]{

   printf["Error! opening file"];
   // Program exits if the file pointer returns NULL.  
   exit[1];  
} fscanf[fptr,"%d", &num]; printf["Value of n=%d", num]; fclose[fptr]; return 0; }

Chương trình này sẽ đọc giá trị số được lưu trong file

fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"];

7 mà chương trình ở VD1 vừa tạo ra và in lên màn hình.

Đọc/Ghi file nhị phân trong C

Các hàm

fclose[fptr]; //Con trỏ FILE trỏ tới file cần được đóng. 1 và

fclose[fptr]; //Con trỏ FILE trỏ tới file cần được đóng. 2 trong C được sử dụng để đọc và ghi file trong C ở dạng nhị phân.

Ghi file nhị phân

Để ghi file nhị phân, bạn cần sử dụng hàm

fclose[fptr]; //Con trỏ FILE trỏ tới file cần được đóng. 2. Hàm này cần 4 tham số: địa chỉ của biến lưu dữ liệu cần ghi, kích thước của biến lưu dữ liệu đó, số lượng kiểu dữ liệu của biến đó và con trỏ FILE trỏ tới file bạn muốn ghi.

fwrite[address_data,size_data,numbers_data,pointer_to_file];

VD3. Ghi file nhị phân sử dụng fwrite[]

include

include

struct threeNum { int n1, n2, n3; }; int main[] { int n; struct threeNum num; FILE *fptr; if [[fptr = fopen["C:\program.bin","wb"]] == NULL]{

   printf["Error! opening file"];
   // Program exits if the file pointer returns NULL.  
   exit[1];  
} for[n = 1; n < 5; ++n] {
  num.n1 = n;  
  num.n2 = 5*n;  
  num.n3 = 5*n + 1;  
  fwrite[&num, sizeof[struct threeNum], 1, fptr];   
} fclose[fptr]; return 0; }

Trong VD3 này, chương trình sẽ tạo ra một file

fclose[fptr]; //Con trỏ FILE trỏ tới file cần được đóng. 4 trên ổ đĩa C của bạn. Chương trình này đã khai báo 1 kiểu dữ liệu cấu trúc lưu 3 giá trị số

fclose[fptr]; //Con trỏ FILE trỏ tới file cần được đóng. 5 Và nó được sử dụng trong hàm main có tên biến là

fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"];

6.

Trong vòng lặp, các số được ghi vào file sử dụng hàm

fclose[fptr]; //Con trỏ FILE trỏ tới file cần được đóng. 2. Các tham số gồm:

  • Tham số đầu tiên là địa chỉ của biến fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"]; 6
  • Tham số thứ 2 là kích thước của biến fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"]; 6
  • Tham số thứ 3 là số lượng kiểu dữ liệu – ở đây là 1.
  • Tham số thứ 4 là con trỏ FILE trỏ tới tệp tin fclose[fptr]; //Con trỏ FILE trỏ tới file cần được đóng. 4

Cuối cùng, chúng ta đóng file sử dụng

fptr = fopen["E:\cprogram\newprogram.txt","w"]; // hoặc fptr = fopen["E:\cprogram\oldprogram.bin","rb"];

3.

Đọc file nhị phân

Hàm

fclose[fptr]; //Con trỏ FILE trỏ tới file cần được đóng. 1 cũng có 4 tham số tương tự như hàm

fclose[fptr]; //Con trỏ FILE trỏ tới file cần được đóng. 2 phía trên.

fread[address_data,size_data,numbers_data,pointer_to_file];

Ví dụ đọc file nhị phân sử dụng fread[]

include

include

struct threeNum { int n1, n2, n3; }; int main[] { int n; struct threeNum num; FILE *fptr; if [[fptr = fopen["C:\program.bin","rb"]] == NULL]{

   printf["Error! opening file"];
   // Program exits if the file pointer returns NULL.  
   exit[1];  
} for[n = 1; n < 5; ++n] {
  fread[&num, sizeof[struct threeNum], 1, fptr];   
  printf["n1: %d\tn2: %d\tn3: %d", num.n1, num.n2, num.n3];  
} fclose[fptr]; return 0; }

Trong ví dụ này, bạn đọc file

fclose[fptr]; //Con trỏ FILE trỏ tới file cần được đóng. 4 và lặp qua từng dòng. Bạn sẽ nhận được các giá trị tương ứng khi bạn ghi vào trong VD3.

Một số ví dụ về đọc ghi file trong C

Trong phần này, mình sẽ trình bày 2 ví dụ về đọc ghi file trong C, bao gồm các bài tập đọc ghi file sau:

Chủ Đề