c - 如何连接 char* 字符串?

标签 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;
}

解决这个问题的最佳方法是什么?

最佳答案

你可能需要做这样的事情:

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 函数中播种随机数生成器,因此我也将其放在那里。

关于c - 如何连接 char* 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55543299/

相关文章:

我们可以在 C 中使用枚举变量的指针吗

c - 多个 printf() 调用与一个长字符串的 printf() 调用?

java - 使用正则表达式查找字符串中的重复字符

c - 为什么函数 "everymonth"返回意外结果?

C指针赋值

c - main() 有时会在 x86 上使用 -fomit-frame-pointer 保留帧指针

c++ - Makefile vpath 不适用于头文件

c - 打开 Watcom 内联汇编 SEG 和 OFFSET 运算符

c - 在C中将文本文件读入二维数组

objective-c - Objective-C 中的指针和数据分配