在调试器中,我从 Executable.exe 中的 (ucrtbased.dll) 收到未处理的异常:将无效参数传递给认为无效参数致命的函数。
我相信我遵循了记录中的函数参数,所以我很困惑为什么会发生这种情况。
该代码来自我尝试使用 XOR 加密文本文件,如果这有助于提供任何清晰度。感谢您阅读本文!
#include <stdio.h>
#include <string.h>
#include <windows.h>
int WINAPI WinMain()
{
FILE* ptr;
ptr = fopen("C:\\Users\\User\\Desktop\\text.txt", "rb+");
fseek(ptr, 0, SEEK_END);
long endpoint = ftell(ptr); //<<<<<<<<<<<<<<<<<<<<<< Area where Unhandled exception occurs
char* buffer = malloc(endpoint + 1);
endpoint = fread(buffer, 1, endpoint, ptr);
rewind(ptr);
char* temp = buffer;
for (int i = 0; i < endpoint; i++, temp++)
{
*temp = *temp ^ 21;
}
fwrite(temp, 1, endpoint, ptr);
free(buffer);
fclose(ptr);
return 0;
}
一般来说,您实际上应该检查可能失败的功能是否已经失败。
在您的情况下,
fopen
至少可能会因返回空文件句柄而失败,而fseek
可能会因返回非零值而失败。
除了这两个问题之外,可能还存在其他问题,但在修复这两个问题之前您可能不会看到它们,因为程序似乎在它们之后立即崩溃。
您应该对其他代码遵循相同的策略,但这两个问题可以通过以下方式解决:
ptr = fopen("C:\\Users\\User\\Desktop\\text.txt", "rb+");
if (ptr == NULL) {
fprintf(stderr, "Could not open file.\n");
exit(1);
}
int rc = fseek(ptr, 0, SEEK_END);
if (rc != 0) {
fprintf(stderr, "Could not seek to end of file.\n");
exit(1);
}