Problem mit Mehrdimensionalen Arrays
-
Hi,
ich bekomme bei meinem Code eine dicke Exception, warum?
#include <stdio.h> #include <string.h> char* strings[] = { "gallo 1", "gallo 2 2", "gallo 3 3 3", "gallo 4 4 4 4", }; int main (void) { for (int i = 0; i < sizeof (strings) / sizeof (strings[0]); ++i) { // Unhandled exception at 0x004132e0 in test.exe: // 0xC0000005: Access violation writing location 0x00415808. strings[i][0] = 'h'; } printf ("%s\n", strings[0]); printf ("%s\n", strings[1]); printf ("%s\n", strings[2]); printf ("%s\n", strings[3]); return 0; }
Danke für jede Hilfe!
-
Du darfst auf Stringliterale nur lesend zugreifen, sonst ist das Verhalten undefiniert. Von daher wäre auch ein
const char* strings[]
besser.
-
Aber ich will ja drauf zugreifen und den ersten (oder einen anderen) Buchstaben manipulieren.
-
Aber ich will ja drauf zugreifen und den ersten (oder einen anderen) Buchstaben manipulieren.
In dem Fall musst du dich freilich bemühen, den Standard zu ändern.
Oder du schreibst halt einfach
#define SIZE (128) char strings[][SIZE] = // statt char* strings[] =
-
C'ler schrieb:
Aber ich will ja drauf zugreifen und den ersten (oder einen anderen) Buchstaben manipulieren.
Tja, das ist leider nicht sinnvoll möglich.
Aber du kannst entweder statische Arrays mit konstanter Grösse (
char[]
wie bei mngbd) oder halt Zeiger auf dynamisch angelegte Arrays (char*
) verwenden, wobei du bei der zweiten Möglichkeit mitmalloc()
undfree()
arbeiten kannst.
-
Schreib es so:
#include <stdio.h> #define DIM1 4 #define DIM2 14 char strings[DIM1][DIM2] = { "gallo 1", "gallo 2 2", "gallo 3 3 3", "gallo 4 4 4 4" }; int main (void) { int i; for (i = 0; i < DIM1; i++) { strings[i][0] = 'h'; } printf ("%s\n", strings[0]); printf ("%s\n", strings[1]); printf ("%s\n", strings[2]); printf ("%s\n", strings[3]); return 0; }