zweidimensionale Array
-
Abend,
folgender Code:int i = 0; char temp[4][80]; temp[i] = "irgendwas";
Wird auf Spalte oder auf Zeile 0 zugegriefen?
-
Damit schreibst du in temp[0][0] bis temp[0][9]. Warum probierst du es nicht einfach aus?
-
_matze schrieb:
Damit schreibst du in temp[0][0] bis temp[0][9].
nö, es wird nur ein pointer zugewiesen. das ist ja kein 'strcpy' oder sowas.
-
~fricky schrieb:
_matze schrieb:
Damit schreibst du in temp[0][0] bis temp[0][9].
nö, es wird nur ein pointer zugewiesen. das ist ja kein 'strcpy' oder sowas.
Oh je, oh je, klar...
Ist es denn schon so spät? Hmpf...
-
ich hab' auch gepennt. der code sollte nicht compilen. einem 2d-array kann man nichts zuweisen, wenn nur eine dimension angegeben wird. ein char[][] ist ja kein char[]* und auch kein char**. trotz der ganzen array-threads in letzter zeit, haben wir beide das wohl noch immer nicht gecheckt.
-
Damit schreibst du in temp[0][0] bis temp[0][9]. Warum probierst du es nicht einfach aus?
Habe es getestet und du hast recht.
der code sollte nicht compilen.
Der Code lässt sich ohnen einen kleinen Fehler compilen.
-
Der Code lässt sich ohnen einen kleinen Fehler compilen.
Seltsam.
Mein gcc sagt:main.c: In function `main': main.c:11: error: incompatible types in assignment
-
Dimension schrieb:
Der Code lässt sich ohnen einen kleinen Fehler compilen.
also bei mir sagt der GCC
x.c: In function `main': x.c:5: error: incompatible types in assignment
EDIT: too late...
-
Ums komplett zu machen:
Der MS-Compiler sagt:
error C2440: '=': 'const char [10]' kann nicht in 'char [80]' konvertiert werden
Er sagte ja auch "Der Code lässt sich ohnen einen kleinen Fehler compilen". Und einen kleinen Fehler würde ich das nicht nennen. Insofern haben alle Recht!
-
/* form.c */ #include <stdio.h> #include <stdlib.h> #define NUMITEMS 4 char *namen[4] = { "Jürgen", "Fatma", "Gismo", "Jonathan" }; int main(void) { int schleife; char temp[4][80]; char name[20]; int alter; long lohn; /* Wir erstellen Namen, Alter und Gehalt. Alter und Gehalt * werden durch Zufallszahlen erzeugt. Mit sprintf schreiben * wir die Daten formatiert int temp */ for (schleife = 0; schleife < NUMITEMS; ++schleife) sprintf(temp[schleife], "%s %d %ld" ,namen[schleife], rand()%20+18, rand()+27500L); /* Wir erstellen eine Kopfzeile */ printf("%4s | %-20s | %5s | %9s\n", "#","Name","Alter","Gehalt"); printf(" ----------------------------------------" "----------\n"); /* Mit sscanf lesen wir die Daten formatiert aus temp aus, * dort wo wir zuvor mit sprintf die Daten formatiert * geschrieben haben */ for (schleife=0; schleife < NUMITEMS; ++schleife) { sscanf(temp[schleife],"%s %d %ld",&name,&alter,&lohn); printf("%4d | %-20s | %5d | %9ld\n", schleife+1,name,alter,lohn); } PAUSE return EXIT_SUCCESS; }
Des ist der komplette code und da gibts kein Fehler beim gcc.
-
Da machst du's ja auch mit sprintf, du Witzbold.
-
Ich sagte ja ich bin Anfänger.
Was ist da der der Unterschied?
-
Du kannst char* nicht einfach so zuweisen und erwarten, dass dann der Inhalt des rechten Strings (in dem Fall dein Literal) in den linken kopiert wird. Das geht in anderen Sprachen oder in C++ mit std::string, aber eben nicht mit char*. Dafür gibts strcpy/strncpy.
In Zukunft solltest du Code-Beispiele auch in der Form posten, wie du sie tatsächlich anwendest. Auf das Wesentliche reduzieren ist gut, aber Sachen verändern, vor allem so gravierend, ist natürlich unvorteilhaft...