01/10/2018, 10:01

Sử dụng con trỏ bị crash C++

Mình sử dụng một đoạn code C++ để thay đổi đuôi của 1 file mà bị crash lúc được lúc không.
Hình như do cách sử dụng con trỏ sai mong pro giúp đỡ

						FILE *f1=NULL, *f2=NULL;
					
						char* encrypt = (char*)Marshal::StringToHGlobalAnsi(strFile).ToPointer();
						
						f1 = fopen(encrypt, "rb");
						char* encrypted = strcat(encrypt, ".locked");
						
						f2 = fopen(encrypted, "wb");
						char key = '3';
						int c;
						while ((c = fgetc(f1)) != EOF)
							fputc(c^key, f2);
					
						fclose(f1); fclose(f2);
rogp10 viết 12:06 ngày 01/10/2018

Marshal -> cái này là CLI ko phải C++.

Tuan Anh Tuananh viết 12:06 ngày 01/10/2018

Marshal::StringToHGlobalAnsi(strFile).ToPointer();

uk nhưng nó đâu có ảnh hưởng rì đâu bạn nhở. K biết bị crash có phải là do chưa giải phóng con trỏ k nữa

Tuan Anh Tuananh viết 12:02 ngày 01/10/2018

@ltd anh ơi anh cho em hỏi chút ạ. Khi em sử dụng code xor encryted để mã hóa một file thì được mà đưa vào vòng lặp mã hóa vài file trong thư mục lại không được anh nhỉ. Nó cứ crash. Code như thế này:

private: System::Void mahoa(System::String ^strFile) {
	try {
		FILE *f1, *f2;

		char* encrypt = (char*)Marshal::StringToHGlobalAnsi(strFile).ToPointer();
		char* encrypted = strcat(encrypt, ".locked");
		char key = '3';
		int c;
		f1 = fopen(encrypt, "r");
		f2 = fopen(encrypted, "w");
		while ((c = fgetc(f1)) != EOF)
			fputc(c^key, f2);
		fclose(f1); fclose(f2);

	}
	catch (Exception ^e)
	{
		//Bắt lỗi
		lstDd->Items->Add(e->Message);
	}
}
viết 12:16 ngày 01/10/2018

đọc lại cái hàm strcat nó đòi yêu cầu gì…

Tuan Anh Tuananh viết 12:01 ngày 01/10/2018

Mình đọc thi tài liệu bảo cần đích đủ lớn.
Mình thay như thế này mà vẫn k đc

		char *encrypt = (char *)calloc(1000, sizeof(char));
		encrypt = (char*)Marshal::StringToHGlobalAnsi(strFile).ToPointer();
		char *encrypted = (char *)calloc(1000, sizeof(char));
		encrypted = strcat(encrypt, ".locked");

Chắc không phải do strcat !

Bài liên quan
0