Bài tập chuỗi code c bị segmentation fault

đoạn code em viết để loại từ str2 ra khỏi str1 nhưng em thay giới hạn ký tự 100 thành 200 thì bị lỗi

Segmentation fault (core dumped)

code :

#include <stdio.h>
#include <string.h>

int main() {
    char str1[100];
    char str2[100];
    gets(str1);
    gets(str2);
    int i=0;
    char strKq[100] = {'\0'};
    while(str1[i] != '\0') {
        int k=0;
        char str3[100]={'\0'};
        while(str1[i] != ' ') {
            str3[k] = str1[i];
            i++;
            k++;
        }
        i++;
        if(strcmp(str2, str3) == 0) {
            char str4[100]={'\0'};
            str4[0] = str1[i-1];
            strcat(strKq, str4);
            continue;
        }
        else {
            str3[k] = str1[i-1];
            strcat(strKq, str3);
        }
    }
    printf("%s", strKq);
    return 0;
}

Đoạn mã bạn đưa chưa sửa thành 200? Vậy đoạn đã sửa thành 200 đâu? Vì bạn khai báo đến 5 mảng có 100 phần tử, bạn có sửa tất cả thành 200?

3 Likes

Ở dòng này:

while(str1[i] != ' ') {

Nếu trong str1 không có dấu space, hoặc không kết thúc bởi dấu space, thì code của cậu lặp vô hạn cho tới khi cậu access vào vùng nhớ không phải dành cho cậu khi cậu thực hiện phép gán str3[k] = str1[i];. Thế nên, segmentation fault được tung ra.

Ngoài ra, cậu nên học gdb, hoặc dùng printf để tự debug chương trình về sau :smile:

5 Likes

học gdb hay cái printf như nào vậy bạn

1 Like

Sao lười thế bạn. GDB google phát có cả đống luôn, còn printf thì kiểu giống như in hàm hay biến để xem nó có đúng như mong muốn của mình không.

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?