Lỗi Segmentation fault 11 trong C

Em đang làm lại 1 function mô phỏng function strlen() với mục đích là để luyện tập nhưng khi chạy thì nó báo lỗi như tiêu đề, source em như dưới (em không cop lại phần thư viện):

int dodaichuoi(char chuoi[]);
int main()
{
char a[] = "hello world";
printf("%d \n",dodaichuoi(a));

return 0;
}

int dodaichuoi(char chuoi[])
{
    int i = 0;
    while (chuoi[i] != "\0")
    {
        i++;
    }
    return i;
}

Vì em mới học nên cũng chả hiểu Segmentation fault: 11 là mẹ gì nên cần các bác giúp đỡ, với cả làm thế nào để tránh gặp lại lỗi này trong các lần code sau ạ.

Ăn nói cho tử tế.


Nói 1 câu đơn giản, segmentation fault 11 xuất hiện khi bạn đưa code lên 1 Online Judge/Online IDE nào đó, nó thông báo cho bạn biết bạn đã truy cập ngoài mảng. Dòm cho kĩ hàm lấy độ dài chuỗi nhé.

Một khi đã code C thì phải biết strlen(s) là lấy độ dài chuỗi s, việc gì phải viết tay :expressionless:

1 Like

Em xin lỗi vì ăn nói thiếu lịch sự, chỉ là em tập viết lại các hàm để luyện tập cho hiểu thêm thôi. Cảm ơn bác đã nhắc nhở, trong thực tế em cũng đâu rảnh làm lại mấy hàm này :smile:

Không hẳn. Khi không hiểu strlen() làm gì người ta sẽ viết ntn:
for(i=0; i < strlen(s); ++i) //strlen lại là một vòng lặp qua s nữa

Khi đã hiểu: for(char* c = s; *c; ++c)

Câu dạng i < len không phù hợp với những chuỗi không có sẵn độ dài.

3 Likes

Là lỗi gì đó thôi. Đổi " " thành ’ ’

[Đánh kẻ chạy đi, không ai đánh kẻ chay lại] :grin:

Bạn đang so sánh char với char*
Sửa lại:

while (chuoi[i] != '\0')
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?