problem mit funktion die txt datei anhand der zeilenumbrüche in array splittet



  • ja is ganz misteriös schauts euch an:

    struct char64
    {
    	char SteamID[64];
    };
    
    char64 * Admins=0;
    int AdminCount=0;
    
    getAdmins()
    {
    	FILE *file;
    	file=fopen("adminlist.txt","rb");
    	fseek(file,0,SEEK_END);
    	int size=ftell(file);
    	fseek(file,0,SEEK_SET);
    	char *Adminlist=new char[size];
    	char * pAdminlist=Adminlist;
    	fread(Adminlist,size,1,file);
    	fclose(file);
    	for(int n=0;n<size;n++)
    	{
    		if(*Adminlist=='\r')
    		{
    			*Adminlist++;
    			continue;
    		}
    		if(*Adminlist=='\n') AdminCount++;
    		*Adminlist++;
    	}
    	Adminlist=pAdminlist;
    	Admins=new char64[AdminCount];
    	int i=0;
    	for(n=0;n<size;n++)
    	{
    		if(*Adminlist=='\r')
    		{
    			*Adminlist++;
    			continue;
    		}
    		if(*Adminlist=='\n')
    		{
    			*Adminlist++;
    			i++;
    			continue;
    		}
    		cout<<i;  // geht, wennich das cout<<i; aber weglasse crashts!
    		Admins[i].SteamID[n]=Adminlist[n];
    		*Adminlist++;
    	}
    }
    

    weiss jemand rat wiesos mit cout net crasht und ohne schon ich finds behindert das hat ja eigentlich gar keinen zusammenhang



  • a) Tolles Problem. Nur das intressiert mich nicht wirklich. Wo ist die Frage?
    b) Was hast du unternommen um den Fehler einzugrenzen oder zu beheben? Wie äußert sich der Fehler?
    c) Über der STRG-Taste befindet sich die Shift-Taste, mit der man auch große Buchstaben schreiben kann wie das in der deutschen Sprache normalerweise üblich ist.
    d) Das ist kein C++.



  • 1. lies meinen thread oder lern deutsch dann siehst die frage und wenns dich net interessiert HDF musst mich net blöd anmachen weil du zu faul bis den thread zu lesen!!!
    2. habe stundenlang das verschiedenste probiert und funktion früher abgebrochen zum schauen bis wos einwandfrei geht. der fehler äussert sich innem crash (steht im thread)
    3. ich achte im internet nie auf gross/kleinschreibung weils nichts bringt
    4. wenn das kein c++ is dann lern was c++ is und ich bezweifle dass man mit nem c++ compiler was anderes als c/c++ kompilieren kann

    aber hier nomma dasses alle verstehen:
    die funktion wie sie dasteht geht wennich da am ende das cout habe (beim kommentar) wennich das cout aber weglasse crasht die funktion. das versteh ich nicht weils ja keinen zusammenhang hat cout gibt ja einfach aus! ich lass nur das cout da weg weilich net brauche-> crash. zum debuggen habich da diverse couts eingefügt und gemerkt das wennich das habe dasses net crasht aber das kannich da net brauchen!



  • a) Toll für doch dass du nicht auf Groß- und Kleinschreibung achtest, aber Anderen ist das nicht egal. Und bedenke dass die anderen Helfen!
    b) Falls du es noch nicht kennst: Verwennde den Debugger, das muss hier keiner für dich tun.
    c) Das ist kein gültiges C++. Deine Funktion hat kein Rückgabetyp und gibt auch nichts zurück. Das ist falsch. Des weiteren verwendet man in C++ Streams und nicht die alten C-Funktionen.



  • d) Es "crasht" ist keine ausreichende Fehlerbeschreibung.



  • crasht=programm stürzt ab!?



  • Ja wohin stürtzt es denn? Auf die Task-Leiste? Oder bekommst du nen Segmentation-Fault, oder einen Debug-Assert, oder gehts einfach aus, oder blinkt die Konsole rot und es kommen Ufos raus?
    Will dir nicht alles aus den Finger ziehen.

    Wenn du wirklich C++ schreiben willst dann mach die Funktion neu und verwende std::i/ofstream.



  • Warum soll er "td::i/ofstream" benutzen?
    Wenn du nicht helfen willst, dann lass doch einfach diese dummen Kommentare!

    schau mal... vielleicht funzt das hier:

    #include <stdio.h>
    #include <vector>
    
    #define MAX_NETWORKID_LENGTH 51
    
    struct admins {
    	char id[MAX_NETWORKID_LENGTH];
    	//bool kick;
    	//bool ban;
    };
    
    std::vector<admins> Admins;
    
    void GetAdmins() {
    
    	FILE *file = fopen("adminlist.txt", "rb");
    	if(!file) return;
    
    	fseek(file, 0, SEEK_END);
    	size_t size = ftell(file) + 1;
    	fseek(file, 0, SEEK_SET);
    
    	char *content = (char *) malloc(size);
    	fread(content, 1, size, file);
    	content[size - 1] = '\0';
    
    	int start = -1;
    	int count = 0;
    
    	for(int i = 0; i < (int)size; i++) {
    		if(content[i] != '\r' && content[i] != '\n' && content[i] != '\0') {
    			if(start == -1) start = i;
    		} else if(start != -1) {
    			content[i] = '\0';
    			Admins.resize(++count);
    			strncpy(Admins[count - 1].id, &content[start], MAX_NETWORKID_LENGTH - 1);
    			start = -1;
    		}
    	}
    
    	// admins ausgeben
    	for(i = 0; i < count; i++) {
    		printf("%s\n", Admins[i].id);
    	}
    }
    
    int main() {
    
    	GetAdmins();
    
    	return 0;
    }
    


  • Knagg0 schrieb:

    Wenn du nicht helfen willst, dann lass doch einfach diese dummen Kommentare!

    Jo und du unterlasse einfach deinen Code der genauso beschissen ist. Es bringt dem Threadersteller gar nichts wenn man hier den Code einfach vorwirft, aber wenn das hier die Definition von Hilfe ist...

    #include <fstream>
    #include <vector>
    #include <string>
    
    std::vector<std::string> getAdmins(std::string filename)
    {
        std::ifstream file(filename.c_str());
        std::vector<std::string> admins;
        std::string line;
    
        while(getline(line, file))
            admins.push_back(line);
    
        return admins;        
    }
    

    Ungetestet.



  • das von knagg0 geht danke, das 2. geht net ausserdem brauchich char und net sonst was 😛



  • smash schrieb:

    das von knagg0 geht danke, das 2. geht net ausserdem brauchich char und net sonst was 😛

    Ist klar da sieht man dass du keine Ahnung hast. Wie schon oben von OMFG erwähnt soll man die alten C-Funktionen nicht mehr verwenden sondern die Streams. Das was du programmierst ist hässlich (da werden mir alle hier zustimmen). Someit ich sehe funktioniert das Programm von OMFG, nur man muss die Übergabeparameter von getline() vertauschen. Das von Knagg0 ist genause Müll.

    Net böse gemeint aber ist so.

    Just my 0.5 cents.



  • EY WISST IHR WAS!? SAGT MIR DOCH MAL EIN FUCKING BUCH WO DRIN C++ STEHT UND NET FAST NUR SCHEISS C!
    ausserdem brauchich char fragt valve wieso!



  • 1. C++-Bücher findest du z.B. hier in reichlicher Auswahl.

    2. strings sind in C++ die bessere Alternative gegenüber char-Arrays, also solltest du sie auch verwenden. Wenn du unbedingt einen char* an eine Fremdbibliothek übergeben mußt, kannst du str.c_str() verwenden.

    3. Gewöhn dir ein paar vernünftige Umgangsformen an 😉



  • 1. hab ma eins gehabt aber da war eigentlich auch mehr c als anderes drin.
    ma schauen wasich hier in der schweiz so kriege ich weiss eben net welches buch ich nehmen soll weil das welches ich hatte war eben net so wirklich gut.
    und allzu viel geld willich auch net ausgeben die bücher sind bei uns in der schweiz ja alle bissel teuerer als in deutschland.
    2. woher sollich diese funktionen kennen? stehen weder in dem buch noch im dem tut dasich gelesen hab.
    3. sry geht mir grade scheisse und wenn mich dann noch leute irgendwie blöd anmachen...


Anmelden zum Antworten