当前我正在尝试编写一个简单的程序来生成一个随机字符串来表示一个名称。调用它会产生我想要的,但是如果我再次调用函数来创建姓氏,我会得到与名字,长度和一切相同的结果。我目前在时间()的时候将兰德排在第一位,所以我不确定什么是错的/我能做什么。任何帮助将不胜感激,谢谢你的时间。rand()即使在srand()后也产生相同的结果
我的代码如下:
int main(void)
{
srand(time(NULL));
int randomNum = 0;
char firstName[12] = { 0 };
char lastName[36] = { 0 };
char fullName[50] = { 0 };
/*for (int j = 0; j < 20; j++)
{
*/ randomNum = rand() % 10 + 2;
strcpy(firstName, generateName(randomNum));
printf("First: %s\n", firstName);
randomNum = rand() % 34 + 2;
strcpy(lastName, generateName(randomNum));
printf("Last: %s\n\n", firstName);
//strcat(fullName, firstName);
//strcat(fullName, " ");
//strcat(fullName, lastName);
//}
//getchar();
return 0;
}
而且generateName功能如下:
char* generateName(int length)
{
char* randomName = NULL;
randomName = (char*)malloc(sizeof(char) * (length + 1));
if (randomName)
{
randomName[0] = rand() % 26 + 65;
for (int i = 1; i < length; i++)
{
randomName[i] = rand() % 26 + 97;
}
randomName[length] = '\0';
}
return randomName;
}
再次,感谢您的时间。
平台,编译器,运行时库?不相关,但是由于没有释放'generateName'的结果而泄漏了内存。 –
对不起,我是一个相对较新的程序员,我在Windows 10上使用Visual Studio 2013,希望能回答你的问题。 –
我是一个完全的傻瓜,我完全没有看到我第二次打印什么。 –