Andreas Pflug: C , Zeigerzugriff

Beitrag lesen

bla[i]=wert;

würde helfen, aber diese verwendung ist ausdrücklich VERBOTEN

Das sollte IMHO aber gehen, auch wenn es vielleicht
eine eher ungewöhnliche Methode ist, um eine
Zeichenkette zu befüllen.
Folgender Code funktioniert hier (soll nur
ein Beispiel sein, nicht unbedingt zur Nachahmung
empfohlen...):

  
ap@zaphodb:~$ cat bla.c  
#include<stdio.h>  
  
int main(void) {  
  char bla[100];  
  int  i=0, code[] = {65, 72, 65, 33, 10, 0};  
  do { bla[i]=code[i]; } while (code[i++]);  
  puts(bla);  
  return 0;  
}  
ap@zaphodb:~$ gcc -Wall -pedantic bla.c  
ap@zaphodb:~$ ./a.out  
AHA!  
  
ap@zaphodb:~$  

Dagegen funktioniert folgendes nicht:

  
ap@zaphodb:~$ cat bla.c  
#include<stdio.h>  
  
int main(void) {  
  char *bla="Diese Zeichenkette ist schreibgeschuetzt!\n";  
  int  i=0, code[] = {65, 72, 65, 33, 10, 0};  
  do { bla[i]=code[i]; } while (code[i++]);  
  puts(bla);  
  return 0;  
}  
ap@zaphodb:~$ gcc -Wall -pedantic bla.c  
ap@zaphodb:~$ ./a.out  
Speicherzugriffsfehler  
ap@zaphodb:~$  

Mit

char bla[] = "Lange, sinnlose Zeichenkette";

geht es dann doch wieder, weil somit auf dem Stack ein
Array dynamisch und beschreibbar angelegt und die Zeichenkette
dorthin kopiert wird.

MfG

Andreas