phân khúc là những gì có lỗi

K

krishna_1980

Guest
code sau đây được đưa ra lỗi thời gian chạy là do lỗi phân khúc "". tại sao?

char * str;
fp = fopen ( "f1.txt", "r");
fgets (str, 10, fp);
puts (str);

nhưng đoạn mã sau là làm việc ............................................ .....

char * str;
fp = fopen ( "f1.txt", "r");
fgets (str, 10, fp);
for (i = 0; i <10; i )
printf ( "% c", * (str i));

 
Tôi không biết nhiều về C , nhưng tôi đã thấy điều gì đó trong các chức năng của họ:

Đây là một ví dụ cho đặt chức năng.
Mã số:* Đặt ví dụ: hello thế giới!
* /

# include <stdio.h>int main ()

(

char string [] = "Chào thế giới!";

đặt (string);

)

 
Bạn chỉ cần khai báo con trỏ đến một không gian bộ nhớ, nhưng, đã không khai báo một biến để lưu trữ các chuỗi đọc, mà là vấn đề.Thêm vào sau khi 7 phút:Các lỗi phân khúc là do truy cập vào một không gian bộ nhớ được gọi là một phân đoạn đó không phải là được phép truy cập từ một số phân đoạn khác.

 
Chào,

Vấn đề là, nó là cần thiết để strore cuối của chuỗi "\ 0".

Trong khi in ấn sử dụng phương pháp 2, tức là vòng lặp bằng cách sử dụng, bạn chỉ cần in ấn chính xác số lượng các ký tự bạn đọc và in ấn.Điều này sẽ làm việc tốt.Tuy nhiên, trong phương pháp đầu tiên, đặt (), mà chỉ cần in bằng cách đọc chuỗi ký tự của nhân vật và tìm các kết thúc của chuỗi, ví dụ: '\ 0' mà không được lưu giữ trong chuỗi trong khi đọc.Đó là yêu cầu để lưu trữ một cách rõ ràng "EOS" end-of-string nếu không bạn sẽ phải sử dụng phương pháp đầu tiên.

Kars

 
Tôi nghĩ chuỗi liên tục tự động chấm dứt '\ 0', vì vậy, tôi nghĩ rằng đó là OK.

 
Chào,
To lớn.nó là cần thiết để cấp phát bộ nhớ cho "str" trước khi sử dụng nó.

Kars.

 
Không, bộ nhớ cho con trỏ đã được cấp phát, nhưng nó không bao giờ được khởi tạo với địa chỉ của một vị trí char hợp lệ.Trong trường hợp này, các giá trị trong bộ nhớ đã được phân bổ cho nó là một giá trị mà gây ra một lỗi phân khúc.

 

Welcome to EDABoard.com

Sponsor

Back
Top