Strings initialisieren und deklarieren

Hallo zusammen!
Ich habe folgendes Problem. Mein Programm besteht aus der main-Funktion und einer test-Funktion. In dieser test-Funktion würde ich gerne einen String s je nach Zufallswert anders mithilfe einer if-Funktion (wahlweise auch switch) deklarieren. In der main-Funktion will ich dann eben die test-Funktion ausführen und anschließend den String mit memset löschen. Doch entweder es übergeht die Befehle in der if-Funktion einfach oder es sagt ich darf nicht zweimal initialisieren oder was auch immer. Ich weiß einfach nicht, wie ich das machen soll.
Wenn ich die if-Funktion und das - char s[10] - weglasse und es in der der test-Funktion einfach als - char s[] = „XXXX“ - formuliere funktioniert es, aber dann fehlt mir halt die Unterscheidung, wenn s einen anderen Inhalt haben soll.
Der Code dazu sieht in verkürzter Form etwa folgendermaßen aus (inklusive des aktuellen Fehlers, bei dem es die if-Funktion praktisch übergeht und einfach ein seltsames Zeichen auf dem Bildschirm ausgibt).:

#include <stdio.h>
#include <windows.h>
#include <string.h>

void test()
{
    char s[10];
    int i;
    i = 0;     // Für Testzwecke konstant
  
    if (i == 0) {
        char s[] = „XXXX“;
    }
   
    printf("%s", s);
}

int main()
{
    test();
    Sleep(1000);
    char s[10];
    memset (s,’ ', 4);

    getchar();
    return 0;
}

Hallo Fragewurm,

#include \<stdio.h\>
#include \<windows.h\>
#include \<string.h\>

void test()
{
&nbsp;&nbsp;&nbsp; char s[10];
&nbsp;&nbsp;&nbsp; int i;
&nbsp;&nbsp;&nbsp; i = 0; &nbsp; &nbsp; // Für Testzwecke konstant

&nbsp; &nbsp; if (i == 0) {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;char s[] = "XXXX";
&nbsp;&nbsp;&nbsp; }

&nbsp;&nbsp; &nbsp;printf("%s", s); 
}

int main()
{
&nbsp;&nbsp;&nbsp; test();
&nbsp;&nbsp;&nbsp; Sleep(1000);
&nbsp;&nbsp;&nbsp; char s[10]; 
&nbsp;&nbsp;&nbsp; memset (s,' ', 4);

&nbsp;&nbsp; &nbsp;getchar();
&nbsp;&nbsp; &nbsp;return 0;
}

Da passt eine ganze Menge nicht.

  1. s ist jeweils eine lokale Variable von test() und main().
    Dies hier macht GENAU das selbe:

    void test()
    {
    char a [10];
    int i;
    i = 0; // Für Testzwecke konstant

    if (i == 0) {
    char a [] = „XXXX“;
    }

    printf("%s", a );
    }

    int main()
    {
    test();
    Sleep(1000);
    char b [10];
    memset ( b ,’ ', 4);

    getchar();
    return 0;
    }

a wird beim Aufruf von test() erzeugt und nach printf() wieder aufgelöst.

  1. char s[10];
    Reserviert im Speicher Platz für 10 Zeichen.
    Um nun deinen String in diese 10 Zeichen einzufüllen musst du strcpy() verwenden.
    die Variante
    char s[10] = „XXXX“:
    Ist ein Spezialfall, welcher nur bei der Definition einer Variablen möglich ist.
    Da Variablen nur einmal definiert werden können, funktioniert dies in deinem Fall nicht.

Zur Lösung deiner Aufgabe gibt es nun verschiedene Ansätze:

  1. Du definierst s[] als globale Variable, also
    char s[10];
    muss dazu ausserhalb von test() und main() stehen.
    Das ist aber eher unschön.

  2. du übergibst s als Parameter an test().

    void test(char *s)
    {
    int i;
    i = 0; // Für Testzwecke konstant

    if (i == 0) {
    strcpy(s, „XXXX“);
    }

    printf("%s", s);
    }

    int main()
    {
    char s[10];

    test(s);
    Sleep(1000);
    memset (s,’ ', 4);

    getchar();
    return 0;
    }

MfG Peter(TOO)