Informationen von stat und statfs ausgeben
-
Fabulus schrieb:
Ah, so funktioniert es und hatte es in der Aufgabe auch so gelöst...
DankeVerstehst du denn auch den Unterschied? Falls nicht, schnapp dir mal ein gutes C Buch.
-
Ich könnte es nicht richtig erklären.
Mit char* fordert man Platz für einen Zeiger an (welcher auf jede Adresse im Speicher liegen kann) und char[10] fordert Platz für ein char-Array der Länge 10 an, dessen Adresse aber nicht mehr später verändert werden kann (außer natürich auf die Adressen der Elemente). So in etwa?
-
Jain.
char * ist ein Zeiger auf char, ja. Wenn du
char * foo = "Beispiel";
machst, dann zeigt foo auf das Zeichenkettenliteral "Beispiel". Dessen Typ ist eigentlichconst char[9]
, d.h. man kann den Text nicht verändern und eigentlich dürfte ein (nicht const) char* da niemals draufzeigen. Ist aber eine Sonderregel in C, dass man das trotzdem darf, Zugeständnis an alten Code. Bei deinem Programm das nicht funktioniert hat, hast du genau dies getan und daher ging das auch schief.
Wenn du statt dem Zeiger jedoch ein Array mit einem Zeichenkettenliteral initialisierst, dann ist das eine besondere Form der Initialisierung, bei der der Inhalt des Literals in das Array kopiert wird. Und da der Inhalt des Arrays (es ist ja selber char[9] und nicht const char[9]) veränderlich ist, funktioniert es damit. Das Weglassen der Größenangabe macht, dass der Compiler für uns die Zeichen zählt, das macht das Literal einfacher änderbar.Beachte jedoch, dass [] und * bei Funktionsargumenten beide die Bedeutung von Zeigern haben.
-
Ah, okay! Das hab ich verstanden! Eine Zeichenkette ist nicht veränderbar, wenn sie mit * definiert wurde, da nur auf die Zeichenkette gezeigt wird. Das wusste ich noch nicht.
Dass Arrays und * beides Zeiger sind, war mir klar, deshalb habe ich beides geichermaßen verwendet.
-
Fabulus schrieb:
Dass Arrays und * beides Zeiger sind, war mir klar, deshalb habe ich beides geichermaßen verwendet.
Normalerweise eben nicht! Nur bei Parameterübergabe an Funktionen steht die Arrayschreibweise für einen Pointer. Dir täte wirklich mal ein gutes C Buch gut.
-
Äh, klar, als Funktionsparameter mein ich doch, wie du vorher schon geschrieben hast. Würde sich ja auch sonst mit dem widersprechen, was ich einen Satz vorher geschrieben habe.
C-Bücher habe ich nicht, nur C++, da ich bis vor kurzem nicht vor hatte, in C zu programmieren, aber dies hat sich wohl geändert. Bisher habe ich sonst zu C alles nur aus dem Netz.
-
In C++ wäre der ganze Thread nach einer Zeile erledigt gewesen, aber das ist dir sicherlich klar (wenn nicht jetzt, dann wenn du mehr gelernt hast).
-
SeppJ schrieb:
In C++ wäre der ganze Thread nach einer Zeile erledigt gewesen
ja nee is klar
-
DrGreenthumb schrieb:
SeppJ schrieb:
In C++ wäre der ganze Thread nach einer Zeile erledigt gewesen
ja nee is klar
Ich verstehe nicht. Oder meinst du, dass die Frage gar nicht erst aufgekommen wäre? Ja, das wäre wohl so.
-
nee, ich meine, wieso sollte C++ hier hilfreich sein. Die String-Literale sind dort genauso wie in C. Und um irgendwelche C-Typen aus Linux-Headern *richtig* auszugeben, muss man auch in C++ den Typ kennen.