Как сохранить строку из массива строк в переменную в C - PullRequest
1 голос
/ 01 августа 2020
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
 char movie[15];
 char movielist[25][30]={"thalaiva","aruvi","sarkar","visvasam","veeram","mersal","bigil","kaithi","mahanadhi","papanasam","vishwaroopam","padayappa","thadam","indian","petta","kaala","psycho","comali","bahubali","saaho","enthiran","vettai","asuraguru","penguin","cocktai"};
 movie=movielist[rand()%25];
 printf("%s",movie);

}

Я хочу, чтобы переменная mov ie сохраняла любую случайную строку из массива movielist! Код выше дает мне ошибку. main. c: 8: 7: ошибка: присвоение выражению с типом массива movie = movielist [rand ()% 25];

Ответы [ 3 ]

3 голосов
/ 01 августа 2020

В вашем коде есть две основные проблемы.

1.

С

movie = movielist[rand() % 25];

вы пытаетесь назначить movie (массив из 15 char, тип char [15]) указателем на массив 30 char (тип char (*)[30]). Это недопустимо в C. Вы не можете назначать массивы.

Поскольку вы не хотите модифицировать / изменять заголовки / строки mov ie в программе, вам не нужен двумерный массив для movielist и массив для movie.

Используйте массив указателей для movielist, который указывает на строковые литералы и указатель на movie.

Указатель move, который вы назначаете затем значение одного из указателей в movielist.

2.

rand() требуется семя с srand(). Без этого rand() не будет работать должным образом. Но вы забыли об этом в своем коде.

Обычный способ - предоставить начальное число, зависящее от времени процессора.

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>       // for the time seed.

int main (void)
{
   char const * movie;
   char const * const movielist[] = { 
                                       "thalaiva","aruvi","sarkar","visvasam","veeram",
                                       "mersal","bigil","kaithi","mahanadhi","papanasam",
                                       "vishwaroopam","padayappa","thadam","indian",
                                       "petta","kaala","psycho","comali","bahubali",
                                       "saaho","enthiran","vettai","asuraguru","penguin",
                                       "cocktai"
                                    };

   // initialize random seed.
   srand(time(NULL));

   movie = movielist[rand() % 25];

   printf("%s", movie);
}

Примечание:

  • void main() не соответствует стандарту C. Используйте int main (void).
1 голос
/ 01 августа 2020

Вы можете использовать strcpy() для копирования строк.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
 char movie[30];
 char movielist[25][30]={"thalaiva","aruvi","sarkar","visvasam","veeram","mersal","bigil","kaithi","mahanadhi","papanasam","vishwaroopam","padayappa","thadam","indian","petta","kaala","psycho","comali","bahubali","saaho","enthiran","vettai","asuraguru","penguin","cocktai"};
 strcpy(movie,movielist[rand()%25]);
 printf("%s",movie);

}
1 голос
/ 01 августа 2020

Используйте указатель char вместо массива char:

char *movie;  // instead of char movie[15];
...
movie = movielist[rand() % 25];

Если вы используете movie[15], как вы это делали, вы не можете назначить его отдельному элементу в movielist, поскольку оператор присваивания не работает с массивом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...