Chuỗi bị Run-Time Check Failure #2 - Stack around the variable 's' was corrupted

Em là người mới của webpage daynhauhoc này, mong mn giúp đỡ. Vấn đề của em là em sắp làm xong chương trình chèn “###” vào chuỗi nhưng đến cuối chương trình lại ko kết thúc đc mà em ko biết fix thế nào ạ. Nhờ mn xem giúp ạ. Em xài visual studio, ngôn ngữ C. (Em chưa biết cách up cái code lên…)

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


void nhap(char s[], char t[]) {
	printf("Nhap S = ");
	gets_s(s,100);
	printf("Nhap T = ");
	gets_s(t,100);
}

void xuat(char s[]) {
	printf("Kiem duyet = ");
	puts(s);
}


void chen(char s[],int vitri) {
	char replace[101] = "###" ,  giaynhap[101]="";
	strcpy_s(giaynhap	, 100	, s + vitri);
	strcpy_s(s+vitri	, 100	, replace);
	strcat_s(s		, 100	, giaynhap);
}


void xoakitu(char s[], int vitri, int sokitu) {
	int n = sokitu;
	while (sokitu > 0) {
		for(int i=vitri; i < strlen(s); i++) s[i] = s[i+1];
		sokitu--;
	}
}


void xuly(char s[], char t[]) {

	//CHEN truoc
	for (int i = 0; i < strlen(s); i++) {
		if (s[i] == t[0]) {
			int flag = 1, k = i;
			//kiem tra neu giong T
			for (int j = 0; j < strlen(t); j++) {
				if (t[j] != s[k]) {
					flag = 0; break;
				}
				k++;
			}
			if (flag == 1) {  xoakitu(s, i, strlen(t)); chen(s, i);  }
		}
	}

}

int main() {
	char s[101], t[101];
	nhap(s, t);
	xuly(s, t);
	xuat(s);
}

Lần sau bạn đặt code giữa hai dấu ``` (Shift + ~) thôi. Hai dấu phải nằm ở hai dòng riêng biệt, tách hẳn so với code.

2 Likes

Bạn vui lòng đưa đề rõ ràng, đọc mã của bạn thì không phải chèn mà là thay thế.
Về lỗi thì bạn xem quá trình chèn thêm có bị tràn mảng không? Bạn thực hiện chèn trước, có nghĩa là chuỗi sẽ tăng độ dài lên liên tục.

2 Likes

À vâng, đề yêu cầu: Nhập chuỗi S và T, xóa và thay thế chuỗi T trong chuỗi S bằng chuỗi “###”, xuất ra chuỗi S đã thay thế.

Cảm ơn mn đã chú ý và giúp em, thì ra em phải “thêm cái s[strlen(s)] = ‘\0’; ngay trước khi xuất kết quả”. Một lần nữa xin cảm ơn.

1 Like

s[strlen(s)] = ‘\0’ có vấn đề vì strlen cũng dựa trên byte 0. Nếu phải thêm vào thì strlen đã tính sai rồi.

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