{String Oriented}[C++] Confonto stringhe.

di il
10 risposte

{String Oriented}[C++] Confonto stringhe.

Salve ragazzi, premetto che sono nuovo del forum, e che prima di registrarmi mi sono stati utili molti argomenti che ho trovato in questo forum come "visitatore".
Premetto anche che sono nuovo del linguaggio, provengo dal PHP, non sono un programmatore di professione, lo faccio per passione da diversi anni, nel tempo libero in quanto lavoro.

Ma ciancio alle bande, veniamo al dunque sono qui oggi per porvi il mio problema, sto creando una DLL che succesivamente injectero in un programma, il funzionamento è questo:

La DLL deve controllare se in una cartella prestabilita in una variabile path ci sono altri file oltre a quelli che ho dichiarato nell'array arry nella function controllo_array()


#include "main.h"
#include <dirent.h>
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

bool controllo_array(string parola, int grandezza)
{
	int i = 0;
	string arry[11][40] = { "mixed.dll","powered.txt","max.txt","perl.txt","juk.txt","liss.txt","readme.txt","nosh.txt","new.exe","cris.txt","voica.m4d" };
	while( i < grandezza){
	if (parola.c_str() == arry[i][40].c_str()){ return true; }else{ return false; } //controllo se il file esiste in arry
	i++;
	}
}

void controllo_file()
{
	DIR* d;
	string path;
	path = "new\\";
	d = opendir(path.c_str());
	if(d) 
	{
        dirent* f;
        while((f = readdir(d))){
			if(controllo_array(f->d_name,11) == false){
			remove(f->d_name); //rimuovo il file che ha trovato {intruso}
			printf("rimuovo %s \n",f->d_name); //scrivo sulla console che ha trovato un intruso
			}else{
			//non fare nulla
			}

		}

    }
}
Il problema è che anche se trova 2 stringhe uguali le da differenti quindi si trova sempre per eliminare tutti i file...

Grazie in anticipo per le eventuali dritte

10 Risposte

  • Re: {String Oriented}[C++] Confonto stringhe.

    In che senso in seguito "inietterai la DLL" ?

    Che stai facendo ?
  • Re: {String Oriented}[C++] Confonto stringhe.

    Un programma che legge i file diciamo che ha nella directory, non è che injectero, voglio far si che questa funzione sia in una DLL che sto creando appunto, perchè altrimenti l'untete potrebbe aggiungere file nella cartella.
  • Re: {String Oriented}[C++] Confonto stringhe.

    parola.c_str() == arry[i][40].c_str()
    out of bounds. Stai leggendo fuori dall'array e in più stai confrontando due puntatori.
  • Re: {String Oriented}[C++] Confonto stringhe.

    Stai mischiando C e C++ fra l'altro con una certa confusione di utilizzo delle stringhe e della logica della ricerca ...

    La funzione controllo_array dovrebbe essere
    
    bool controllo_array(string parola, int grandezza)
    {
    	int i = 0;
    	string arry[] = { "mixed.dll","powered.txt","max.txt","perl.txt","juk.txt","liss.txt","readme.txt","nosh.txt","new.exe","cris.txt","voica.m4d" };
       
    	while( i < grandezza)
    	{
    		if (parola == arry[i])
    			return true; 
    	
    		i++;
    	}
    
    	return false; 
    }
    
  • Re: {String Oriented}[C++] Confonto stringhe.

    Avevo provato anche a fare così come dici tu, ma in ogni caso riporta sempre tutti i file della directory quasi i nomi non fossero uguali anche se in realtà lo sono...
  • Re: {String Oriented}[C++] Confonto stringhe.

    Non capisco cosa dici.
  • Re: {String Oriented}[C++] Confonto stringhe.

    La funzione ritorna sempre falsa..

    Questa è la funzione:
    bool controllo_array(string parola, int grandezza)
    {
       int i = 0;
       string arry[] = { "mixed.dll","powered.txt","max.txt","perl.txt","juk.txt","liss.txt","readme.txt","nosh.txt","new.exe","cris.txt","voica.m4d" };
       
       while( i < grandezza)
       {
          if (parola.c_str() == arry[i].c_str())
             return true;
       
          i++;
       }
    
       return false;
    }
    
    if(controllo_array(f->d_name,11) == false){
    //controllo_array() ritorna falso
    }else{
    //controllo_array() ritorna vero
    }
    Ora se io andassi a richiamare il controllo così:
    controllo_array("powered.txt",11);
    dove powered.txt è una stringa esistente nell'array, e 11 è la grandezza dell'array(immessa nella funzione per facilitarmi il while).
    Ora, come è possibile che la funzione mi ritorni falsa?
    Dovrebbe tornare vera in quanto la stringa è presente nell'array...
  • Re: {String Oriented}[C++] Confonto stringhe.

    Il codice che stai usando per la funzione *non* è quello che ti ho suggerito.
  • Re: {String Oriented}[C++] Confonto stringhe.

    Se stai lavorando in C++ usa le funzioni e le classi che C++ ti mette a disposizione. Non c'è bisogno di reinventare la ruota. E segui anche gli consigli che male non fanno.
    
    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    
    
    using namespace std;
    vector<string> arry; 
    
    bool controllo_array(const string & parola)
    {
    	return (std::find(arry.begin(),arry.end(),parola) !=  arry.end());
    }
    
    void controllo_file()
    {
    	if(controllo_array("new.exe"))
    	{
    		cout << "trovato";
    	}
    	else
    		cout << "non trovato";
    }
    
    int main()
    {
    	arry.push_back("mixed.dll");
    	arry.push_back("powered.txt");
    	arry.push_back("max.txt");
    	arry.push_back("perl.txt");
    	arry.push_back("juk.txt");
    	arry.push_back("liss.txt");
    	arry.push_back("readme.txt");
    	arry.push_back("nosh.txt");
    	arry.push_back("new.exe");
    	arry.push_back("cris.txt");
    	arry.push_back("voica.m4d");
    	controllo_file();
    }
    
  • Re: {String Oriented}[C++] Confonto stringhe.

    Ora funziona, grazie Sky.
    Sarà fatto
Devi accedere o registrarti per scrivere nel forum
10 risposte