Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
salve in questo periodo sto riorganizzando il mio keylogger suddividendolo in vari sorgenti, il "modulo" per la codifica in HTML non funziona correttamente, e dopo vari giorni di tentativi, debugging e meditazione, sono arrivato alla conclusione che
Codice sorgente - presumibilmente Plain Text
dest[0] = 0;
strcat(dest, source);
non equivale a
Codice sorgente - presumibilmente Plain Text
strcpy(dest, source);
nel vano tentativo di scoprire perchè questa cosa non sia vera, vi posto il sorgente del modulo
Codice sorgente - presumibilmente C++
#include "HTML_encoder.h"
#include <string.h>
#include <windows.h>
BYTE temp[1024];
void HTML_build_row(BYTE *source, BYTE *dest)
{
dest[0]=0;// se il primo carattere della stringa è il carattere di fine stringa, allora la stringa è vuota
Non ho capito bene cosa vuoi sapere di preciso:
Però di ciò che sò, è che la funzione strcat copia a partire dal terminatore stringa della stringa di destinazione, mentre la strcpy copia tutto e comunque sempre se c'è spazio a disposizione.
facendo così sotto è equivalente alla funzione strcpy.. però non sempre! Anche perchè penso che questo sia un eccezione particolare che si mostra equivalente.
Testo quotato
Postato originariamente da norbix:
Codice sorgente - presumibilmente Plain Text
dest[0] = 0;
strcat(dest, source);
non equivale a
Codice sorgente - presumibilmente Plain Text
strcpy(dest, source);
Nel tuo programma ho notato un piccolo errore in questa riga:
Testo quotato
Postato originariamente da norbix:
Codice sorgente - presumibilmente Plain Text
if(source[i] == '"') strcat(dest, """);
Ultima modifica effettuata da Lawliet il 28/08/2009 alle 7:24
non è un errore, altrimenti il compilatore me lo segnalerebbe, li c'è un doppio apice e un & quot ;
solo che non viene visualizzato nel forum, non so perchè
e quindi.. perchè non equivale?
sai la cosa davvero strana? che l'algoritmo funziona molto bene fino alla fase iniziale del programma, ma poi è come se la stringa passata (source) fosse vuota, questo l'ho scoperto grazie a qualche printf messo nei posti giusti.
ho fatto molte prove, notando come la stringa cambiasse, ho individuato le funzioni che modificano quella stringa (in realtà non la modificano, perchè viene sempre copiata) e alla fine ho trovato HTML_encoder, bypassandola infatti (strcpy(dest, source); return; a inizio funzione) il programma funziona correttamente, mentre con un strcat(); le cose non vanno per il verso giusto. quindi, la mia domanda è, perchè
Codice sorgente - presumibilmente Plain Text
dest[0] = 0;
strcat(dest, source);
non equivale a
Codice sorgente - presumibilmente Plain Text
strcpy(dest, source);
?
grazie e a presto!
IMPORTANTE: i problemi ci sono solo quando è attivo l'if dei caratteri ">>", negli altri casi tutto funziona perfettamente
Ultima modifica effettuata da norbix il 28/08/2009 alle 13:37
Bisogna capire se, quando passi la stringa dest, questa e' stata regolarmente allocata.
Mostra anche il codice del main che utilizzi per chiamare le varie funzioni.
P.S. Inoltre, anche se non e' questo il problema principale, utilizzi la strcat con un vettore di BYTE e questo il compilatore dovrebbe fartelo notare (dicendoti che manca un cast ...).
ci avevo pensato al cast, ma non risolvendo nulla ho lasciato i BYTE, il compilatore non mi avvisa, uso GCC con l'opzione -Wall (attiva tutti i warning), e visto che mi avvisa persino se manca il carattere newline alla fine del sorgente.. penso che il cast da unsigned char a char (o viceversa) non serva proprio
uso BYTE perchè avendo studiato da poco programmazione a basso livello mi piace di più avere tutte le cose sotto controllo, anche se in questo caso è proprio una mania
il codice del main.. uhm, sono un po di file, ti allego un archivio