Функция, которая возвращает указатель на строку, которая состоит из случайных букв - PullRequest
0 голосов
/ 28 октября 2019

Я только начинаю учиться c. Как я уже сказал, это должна быть просто строка, но я не могу понять это, поэтому я использовал массив. Но это должна быть строка. Он ничего не печатает или просто некоторые случайные символы.

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

   char* random_word(int num_letters);

   int main(void) {

   char *word = random_word(5);
   puts(word);
   free(word);
   return 0;
   }

   char* random_word(int num_letters) {
   int a = 1;
   char *word = (char*) malloc(num_letters + 1);
   char h_word[num_letters+1];
   srand((unsigned) time(NULL));
   int i;
   for(i=0;i<sizeof(h_word);i++){
       if (!i == strlen(h_word)) {
           if(a){
              h_word[i] = 65+rand()%(90-65);
              a=0;
        }else{
            h_word[i] = 65+rand()%(90-65);
            a=1;
        }
    }else h_word[i] = '\0';
 }
      word = h_word;
  return word;

}

1 Ответ

3 голосов
/ 28 октября 2019

Здесь проблема:

word = h_word;

Вы пытаетесь скопировать h_word в word, но это неправильный способ сделать это. Это просто переназначает указатель. Вместо этого сделайте следующее:

strcpy(word, h_word);

Кроме того, if (!i == strlen(h_word)) проблематично, потому что h_word неинициализирован, так что это неопределенное поведение. Вместо этого удалите этот оператор if и поместите h_word[i] = '\0'; после цикла for.


Но почему в любом случае h_word? Вы можете просто полностью удалить его и поместить word туда, где вместо него стоит h_word. Цикл может быть for (i = 0; i < num_letters; i++) {.

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