如何连接char *字符串?

时间:2019-04-05 21:01:19

标签: c string pointers

我试图通过连接随机的元音和辅音来生成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 个答案:

答案 0 :(得分:1)

您可能需要执行以下操作:

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函数中,因此我也将其放在那里。