2017-01-11 9 views
0

Ich stieß auf ein Problem beim Versuch, eine zufällige Frucht aus dem Array in ein Array von Zeichen zu speichern.Wie speichere ich eine zufällige Zeichenfolge aus einem Array von Zeichenfolgen in c?

Die Fehlermeldung lautet: Fehler: Zuordnung zu Ausdruck mit Array-Typ Obst = Früchte [Rand()% 20];

Insbesondere ist es diese beiden Linien, die das Problem zu sein scheinen:

char fruit[20]; 
fruit = fruits[rand() % 20]; 

Ich habe versucht, es in einer Zeile kombiniert, wie:

char fruit[] = fruits[rand() % 20]; 

Aber das funktioniert auch nicht. Ich habe versucht, dies aus anderen Posts herauszufinden, aber ich kann nicht die Ursache herausfinden. Wenn jemand eine Lösung oder eine korrekte Methode dafür hat, würde ich es sehr schätzen. Vielen Dank.

Voll Code:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main() { 
time_t t; 
const char *fruits[20] = {"apple", "pear", "orange", "banana", "watermelon", "cantaloupe", "grape", "kiwi", "blackberry", "blueberry", "raspberry", "cherry", "strawberry", "lemon", "lime", "plum", "pineapple", "peach", "mango", "olive"}; 

srand((unsigned) time(&t)); 

char fruit[20]; 
fruit = fruits[rand() % 20]; 

printf("\nrandom fruit is %s\n", fruit); 
return 1; 
} 

Antwort

1

Wenn Sie kopieren C Strings, Sie verwenden Zuordnung nicht, da dieser den Zeiger auf die Zeichenfolge zu kopieren versucht. Der Versuch, das in eine Array-Variable zu kopieren, verursacht das Problem.

Verwenden Sie stattdessen die string.h Einrichtungen:

strcpy (fruit, fruits[someRandomIndex]); 

Und stellen Sie sicher, dass Sie nie golden delicious apple in die Liste der Früchte hinzufügen, da sie leicht die 19-Zeichen-Grenze :-)

Aber, wird überschreiben Tatsächlich brauchen Sie nicht brauchen, um die Zeichenfolge zu kopieren, da Sie ganz in der Lage sind, den ursprünglichen Zeiger auf printf zu übergeben. Sie können auch Ihren Code aufzuräumen, um die Wartung zu erleichtern:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main (void) { 
    // Const pointer to const data generally allows more 
    // scope for optimisation. Also auto size array. 

    static const char const *fruits[] = { 
     "apple", "pear", "orange", "banana", "watermelon", 
     "cantaloupe", "grape", "kiwi", "blackberry", 
     "blueberry", "raspberry", "cherry", "strawberry", 
     "lemon", "lime", "plum", "pineapple", "peach", 
     "mango", "olive"}; 
    static const int fruitCount = sizeof(fruits)/sizeof(*fruits); 

    // Seed generator, no need to store, just use it. 

    srand ((unsigned) time(0)); 

    // Get random pointer based on size, and print it. 

    printf ("Random fruit is %s\n", fruits[rand() % fruitCount]); 

    // Return usual success code. 

    return 0; 
} 
1

Verwenden strcpy (von „string.h“):

strcpy(fruit, fruits[rand() % 20]); 

Allerdings, wenn Ihr Ergebnis braucht nur eine Konstante zu sein Zeichenfolge und Sie werden es nicht ändern, deklarieren Sie es als Zeiger einfach const char* fruit; und Sie können die Zuordnung wie Sie getan haben.

Verwandte Themen