C: Zeiger Array; String als Funktionsresultat

Huhu,
ich bin mal wieder nach ner längeren Pause aufs Programmieren gestoßen Versuche grade von Delphi auf C umzusteigen und arbeite mich im Moment durch Zeiger.
Ich habe versucht mein altes Delphi-Cäsar-Verschlüsselungsprogramm in C zu schreiben. Mit Arrays geht das ganze(wie auch in Delphi) ja noch einfach. In meiner Lektüre steht jedoch, dass ein Array im Grunde nichts anderes als ein Zeiger ist. Wenn ich jetzt mein Programm so ändere, dass ich Zeiger benutze erhalte ich jedoch keine Ausgabe. Kann mir vielleicht jemand erklären, was an meinen Zuweisungen an den Pointer falsch ist?
Ich hab zunächst den verschlüsselten Buchstaben an eine lokale char Variable übergeben und diese dann erst an den Zeiger, weil ich dachte, dass es ‚alles in einer Zeile‘ vielleicht nicht funktioniert. Aber weder das eine noch das andere klappt :frowning:
Vielen Dank schonmal.
lg, Sven

Hier das Programm:

#include 
#include 

#define MAXCHAR 1000

char \*encrypt(char \*, int);

int main(int argc, char \*argv[])
{
 char input[MAXCHAR];
 int lstep;

 printf("Type in the text to encrypt:\n"); //Textinput
 fgets(input, sizeof(input), stdin);

 printf("Type in the increment:\n"); //Incrementinput
 scanf("%i", &lstep);

 printf("%s", encrypt(input, lstep)); //Output
 system("PAUSE"); 
 return 0;
}

char \*encrypt(char \*string, int pstep)
{
 char s;

 for ( ; \*string != '\0'; string++) 
 {
 if (\*string \>= 'A' && \*string = 'a' && \*string = 'A' && string[i] = 'a' && string[i] 

Hi,

Du läßt den übergebenen Pointer bis zum Ende des Strings wandern und gibst ihn dann so zurück. Es kommt also ein Zeiger auf das terminierende Nullbyte zurück, davor stehen aber die transformierten Zeichen.

Verwende eine Kopie des Zeigers in einer lokalen Variablen, dann sollte es gehen.

Gruß,
Ralf

char \*encrypt\_falsch(char \*string, int pstep)
{
 char s;

 for ( ; \*string != '\0'; **<u>string++</u>** )
 {
 ...
 }
**<u>return string;</u>** // zeigt jetzt hinter die transformierten Zeichen
}





char \*encrypt\_besser(char \*string, int pstep)
{
 char s;
**<u>char *strtmp = string;</u>**

 for ( ; \*strtmp != '\0'; strtmp ++)
 {
 ... // strtmp verwenden!
 }
**<u>return string;</u>** // nicht strtmp!
}

Super, dein Tipp funktioniert und ich habe jetzt auch verstanden wo der Fehler lag.
Ich hab den Parameterpointer inkrementiert bis er auf das Nullzeichen ‚\0‘ zeigt und ihn dann anschließend ausgegeben bzw eben nicht, weil es nichts zum Ausgeben gab. Der lokale Pointer verändert jetzt die Zeichen an den jeweiligen Adressen der Zeichenkette und wandert bis zum Nullzeichen und anschließend wird der Parameterpointer, der aber ja noch immer auf den Anfang der Kette zeigt, ausgegeben! Das ist natürlich clever :smile:
Danke schön :smile: