Seite 125 von 202 ErsteErste ... 2575115121122123124125126127128129135175 ... LetzteLetzte
Ergebnis 1.861 bis 1.875 von 3026

Thema: [Programmiererstammtisch] "Zum ächzenden Compiler"

  1. #1861
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Und was war jetzt das Problem mit insert? Weil einfügen tust du mit deiner Lösung nichts.

  2. #1862
    reztuneB retreirtsigeR Avatar von EpicFail
    Registriert seit
    16.11.11
    Beiträge
    3.827
    Also ja dann habe ich mich wohl falsch ausgedrückt dies bezüglich

    Insert funktioniert dann auch mit dem dereferenzieren, zumindest meckert der Compiler nicht.
    Code:
    	auto it = (*test)[0].begin();
    	(*test)[0].insert(it, b);
    Zitat Zitat von Austra Beitrag anzeigen
    Dort herrscht Dauerkrieg zwischen den Feminazi-Ökofaschisten und und Konservativen-FDP-AfD-Nazis

  3. #1863
    Advocatus Diaboli Avatar von Mr. X
    Registriert seit
    01.04.12
    Ort
    Das grüne Herz Deutschlands
    Beiträge
    11.945
    Sieht doch gut aus. Ich finde deine <vector<vector>>-Konstruktion interessant. Brauchst du tatsächlich einen Vektor beliebiger Länge, gefüllt mit Vektoren beliebiger Länge?

  4. #1864
    Registrierter Benutzer
    Registriert seit
    08.08.12
    Beiträge
    751
    Hi,
    ich stehe irgendwie total aufm Schlauch. Wir sollen ein Programm schreiben, dass einen String einliest, auf den Buchstaben char c überprüft und den restlichen Teil des Strings im Doppelpointer **rest an die Stelle *rest speichern.
    Ich hab jetzt über eine Stunde blöd rumprobiert, aber das Programm stürzt jedes mal ab... Habs auch schon ohne den Doppelpointer probiert, aber irgendwie bekomm ich das einfach nicht hin
    Kann mir irgendjemand sagen, was falsch ist?

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    int split(char * w, char c, char **rest);
    
    int main(void){
    	char c = 'a';
    	char *w = "Hallo";
    	char **rest;
    	int i;
    	
    	printf("*w: %s\n", w);
    	i = split(w, c, rest);
    	printf("%i\n", i);
    
    	if(i == 1){
    		printf("**rest: %s\n", rest);
    	}
    
    	return 0;	
    }
    
    int split(char * w, char c, char **rest) {
    	int i = 0;
    	while (w[i] != c && w[i] != '\0')
    		++i;
    	if (w[i] == c) {
    		w[i] = '\0';
    		if(rest != NULL){
    			rest = &w[i + 1];
    		}
    	
    		return 1;
    	}
    	else
    		return 0;
    }
    Edit: char**rest wird natürlich deklariert
    Geändert von Gobl (15. Januar 2018 um 18:53 Uhr)

  5. #1865
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.903
    Zitat Zitat von Gobl Beitrag anzeigen
    Hi,
    ich stehe irgendwie total aufm Schlauch.
    Als Erstes, kompiliere dein Programm mal mit Warnungen, z.B. -Wall -Wextra bei gcc/clang... Dann solltest du schon mal weiter kommen.

  6. #1866
    Registrierter Benutzer
    Registriert seit
    08.08.12
    Beiträge
    751
    Ich befürchte Hilfe zur Selbsthilfe bringt nichts mehr

    Hab jetzt die zwei Warnungen mit aufgenommen und es wurde nur angemerkt, dass in printf("**rest: %s\n", rest); rest falsch ist und **rest uninitialisiert verwendet wird. Erstes hab ich ausgebessert, fürs zweite finde ich schonmal keine passende Lösung. Alles was ich finde sind immer nur Pointer auf bestehende Matrizen, aber hier soll ja gar nichts wirklich initialisiert werden

  7. #1867
    Süß und knuddlig Avatar von Schlumpf
    Registriert seit
    03.11.13
    Beiträge
    7.968
    Du versucht sie pointer adresse zu printen und und nicht den String, da rest ein Doppelpointer ist.
    Meine Liste:
    1. K
    2. T
    3. V

  8. #1868
    Registrierter Benutzer
    Registriert seit
    08.08.12
    Beiträge
    751
    Zitat Zitat von Schlumpf Beitrag anzeigen
    Du versucht sie pointer adresse zu printen und und nicht den String, da rest ein Doppelpointer ist.
    printf("**rest: %s\n", *rest); Hatte ich verbessert, wie geschrieben. Das war das einzige das ich anpassen konnte.
    Der Fehler muss aber schon in der split-Funktion auftreten, das die erste print-Anweisung noch ausgegeben werden kann, aber dann das Programm abstürzt, wenn split() aufgerufen wird

  9. #1869
    Registrierter Uses Avatar von fuchs87
    Registriert seit
    26.08.09
    Beiträge
    4.436
    &w[i+1] ergibt als Ergebnis die Adresse einer char-Variablen.

  10. #1870
    Registrierter Benutzer Avatar von Strat
    Registriert seit
    08.01.15
    Ort
    HGW
    Beiträge
    3.889
    Wie kriegt du das Programm überhaupt zum Laufen ? Mein Compiler weigert sich zu kompilieren wegen Zeile 30
    Zitat Zitat von Schlumpf Beitrag anzeigen
    Strat ist doch so ein verkorkster Linker
    Zitat Zitat von Isaac Newton; in einem Brief an Robert Hooke
    Wenn ich weiter geblickt habe, so deshalb, weil ich auf den Schultern von Riesen stehe.
    Storys

    Civ 4: Weg in den Olymp
    Civ 4 PBEM 474 Das Steigen und Fallen der Kurse

  11. #1871
    Registrierter Benutzer
    Registriert seit
    08.08.12
    Beiträge
    751
    Zitat Zitat von fuchs87 Beitrag anzeigen
    &w[i+1] ergibt als Ergebnis die Adresse einer char-Variablen.
    Aber ich möchte ja die Adresse speichern? Ich sehe nicht was falsch ist. Vielleicht ist es total offensichtlich, aber so wie ich mich da mittlerweile reingesteigert habe, werd ich das nicht mehr sehen. Kann denn jemand mir bitte sagen, was dort zu verbessern ist?

    @Strat: Keine Ahnung, es läuft einfach

  12. #1872
    Süß und knuddlig Avatar von Schlumpf
    Registriert seit
    03.11.13
    Beiträge
    7.968
    Du versuchst einem pointer auf einen char pointer die Adresse des chars zu geben. w[i+1] dereferenziert das array und dann referenzierst du ihn nur einmal weswegen rest da ein normaler char pointer sein müsste und nicht ein pointer auf einen char pointer.
    Meine Liste:
    1. K
    2. T
    3. V

  13. #1873
    Registrierter Benutzer
    Registriert seit
    08.08.12
    Beiträge
    751
    Das ist aber diese tolle Aufgabenstellung hier^^ Wir müssen einen Doppelzeiger verwenden

    Edit: Hier mal die Aufgabenstellung:
    a) (**, 4 Minuten)
    Betrachten Sie die folgende Funktion aus Kapitel 13 der Vorlesung:
    char * split(char * w, char c) {
    int i = 0;
    while (w[i] != c && w[i] != '\0')
    ++i;
    if (w[i] == c) {
    w[i] = '\0';
    return &w[i + 1];
    }
    else
    return NULL;
    }
    Implementieren Sie eine abgeanderte Version dieser Funktion mit dem Prototypen
    int split(char *w, char c, char **rest), die
     1 zuruckgibt, falls c in w vorkommt,
     0 zuruckgibt, falls c in w nicht vorkommt,
     die Adresse des abgeteilten zweiten Teils von w nicht zuruckgibt, sondern an der Stelle
    *rest speichert, falls fur rest nicht NULL ubergeben wurde.
    Geändert von Gobl (15. Januar 2018 um 20:11 Uhr)

  14. #1874
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Oben fehlt bei dir der Stern vor rest (= &w[i+1] oder auch w+(i+1))


    Edit: Im printf weiter oben ebenfalls.
    Edit2: Wobei in main noch mehr schief gegangen ist, wie Quietsch mittlerweile schrieb. Das dortige rest darf so nicht übergeben werden, sondern die Adresse auf seine Position.
    Also statt char **rest; ... ; split(..., rest); muss es char *foobar; ...; split(..., &foobar); sein.
    Geändert von Ramkhamhaeng (15. Januar 2018 um 20:26 Uhr)

  15. #1875
    Registrierter Uses Avatar von fuchs87
    Registriert seit
    26.08.09
    Beiträge
    4.436
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    int split(char * w, char c, char **rest);
    
    int main(void){
    	char c = 'a';
    	char *w = "Hallo";
    	char *rest;
    	int i;
    
    	printf("*w: %s\n", w);
    	i = split(w, c, &rest);
    	printf("%i\n", i);
    
    	if (i == 1){
    		printf("**rest: %s\n", rest);
    	}
    
    	return 0;
    }
    
    int split(char * w, char c, char **rest) {
    	int i = 0;
    	while (w[i] != c && w[i] != '\0')
    		++i;
    	if (w[i] == c) {
    		if (rest != NULL){
    			 *rest = &w[i + 1];
    		}
    
    		return 1;
    	}
    	else
    		return 0;
    }

Seite 125 von 202 ErsteErste ... 2575115121122123124125126127128129135175 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •