Как объединить строки char *? - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь сгенерировать строку name путем объединения случайных гласных и согласных.

Я пытался использовать strcat для объединения случайных гласных / согласных в строку name, но это приводит к ошибке сегментации.

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

[...]

char randomVowel() {
    char * vowels = "aeiou";
    return vowels[randomRange(0, 4)];
}

char randomConsonant() {
    char * consonants = "bcdfghjklmnpqrstvxwyz";
    return consonants[randomRange(0, 20)];
}


char * randomName() { 
    int i; 
    char * name;

    for (i = 0; i < randomNumber(20); i++){
        i % 2 ? strcat(name, randomVowel()) : strcat(name, randomConsonant());
    }

    return name;
}

int main () {

    printf("%s\n", randomName());

    return 0;
}

Как лучше всего решить эту проблему?

1 Ответ

1 голос
/ 06 апреля 2019

вам, вероятно, нужно сделать что-то вроде этого:

void appendChar(char *name, int len, char c) {
    name[len] = c;
}

char * randomName(char *name) {
    int i;

    for (i = 0; i < randomNumber(20); i++){
        i % 2 ? appendChar(name, i, randomVowel()) : appendChar(name, i, randomConsonant());
    }

    return name;
}

int main () {
    char name[32] = "";
    time_t t;

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

    printf("%s\n", randomName(name));

    return 0;
}

Таким образом, вы просто помещаете каждый генерируемый символ в конец строки name.Обычно вы хотите использовать генератор случайных чисел в вашей функции main, поэтому я поставлю это и для вас.

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