gpt4 book ai didi

c - 具有随机字符的随机长度字符串

转载 作者:行者123 更新时间:2023-11-30 18:00:57 28 4
gpt4 key购买 nike

嘿,所以我正在努力奋斗。我需要创建一个随机字符串(长度为 2 到 6),并为每个“A”到“Z”生成一个随机字符。问题是我正在尝试使用其中包含 char* 的结构。然后当我尝试生成随机数据时动态分配每个结构。

struct TStruct 
{
int ID;
float Value;
int a[4];
char *Name;
};

//create pointer to TSruct
typedef struct TStruct *ptrStruct;

//have ptrStruct point to 10 structs
ptrStruct structs[NUM_STRUCTS];

void genStruct(ptrStruct *alpha, int countID){
//declare variables
//ID counter
countID+=1;
int i;
int temp;
int tempChar;
int nameSize;
*alpha = (ptrStruct)malloc(sizeof(struct TStruct));
srand(time(0));
//put the ID in
(*alpha)->ID=countID;
//random number 0 to 999.99
(*alpha)->Value= (float)rand()/((float)(RAND_MAX)+1000)/100;
//store 4 ints 0 to 100 into array a
for (i = 0; i < 4; i++) {
//generate random number
temp = rand() % 100;
//put into the array
(*alpha)->a[i] = temp;
}
//generate a random length for the name 2 to 6
nameSize = rand() % 4 + 2;
char buffer[2];
//run a for loop based on the size of nameSize
//THIS IS THE PROBLEM CODE!!!
for (i = 0; i < nameSize; i++) {
snprintf(buffer,2, "%d",(rand() % 25)+65);
strcat((*alpha)->Name,buffer);
}
}

任何帮助将不胜感激。谢谢

最佳答案

一个主要问题是您没有为字符串分配空间。结构中有一个未初始化的 char *Name

坦率地说,对于 6 个(甚至 8 个)字符,您应该简单地将数组分配为结构的一部分。在 64 位机器上,指针会比数组大;在 32 位机器上,与仅使用数据相比,使用指针加数据仍然会使用更多的空间。

你的角色生成循环也很不稳定。 rand() 表达式或多或少是合理的(它不会生成 'Z' 并且会偏向字母表的开头),但您应该使用 'A' 而不是 65,您只需将该字符分配到名称中的相关位置即可。像这样使用 snprintf() 将为您提供每个字母的代码的 10 位数字,这根本不是您想要的。

不要忘记以 null 终止字符串。并且不要忘记 strcat() 仅当字符串已经以 null 结尾时才有效;你也没有解决这个问题。

<小时/>

Joachim Pileborg在现已删除的评论中做出了准确的评论,您应该确保只调用 srand() 一次,通常是在程序启动时。如果您每秒调用 genStruct() 函数一次以上(并且如果您调用它两次以上,您几乎可以保证 — 即使在 4 MHz 的原始 IBM PC 上 — 您也会同一秒内至少有三个调用中的两个),那么每次使用相同的数字(时间)调用 srand() 时,您将获得生成的相同数据。

关于c - 具有随机字符的随机长度字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10083408/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com