C:生成随机字符串并将其添加到struct的函数

来自Java / C#的一些经验,我很难绕过C的某些部分。我有一系列结构。 目前,这些结构只有一个成员(我将在轨道上添加其他成员) – 一系列字符。 此数组是一个由6个字符组成的字符串 – 两个字母,四个数字(例如XY1234)。

以下代码生成我正在寻找的objectCode:

#include  #include  #include  #include  #define LETTERS_IN_ALPHABET 26 typedef struct object { char objectCode[6]; } object_t; void GetRandomSeed() { srand((unsigned)time(NULL)); } char RandomLetter() { return 'A' + rand() % LETTERS_IN_ALPHABET; } int RandomDigit() { return rand() % 10; } int main() { GetRandomSeed(); object_t object1; for (int i = 0; i < 2; i++) { object1.objectCode[i] = RandomLetter(); } for (int i = 2; i < 6; i++) { object1.objectCode[i] = '0' + RandomDigit(); } // Print objectCode string to screen for (int i = 0; i < 6; i++) { printf("%c", object1.objectCode[i]); } printf("\n"); return 0; } 

我试图在函数中包装for循环(那些随机生成代码的循环)。 但是,我尝试这样做的打印只是胡言乱语:

 #include  #include  #include  #include  #define LETTERS_IN_ALPHABET 26 typedef struct object { char objectCode[6]; } object_t; void GetRandomSeed() { srand((unsigned)time(NULL)); } char RandomLetter() { return 'A' + rand() % LETTERS_IN_ALPHABET; } int RandomDigit() { return rand() % 10; } void GenerateCode(object_t object) { for (int i = 0; i < 2; i++) { object.objectCode[i] = RandomLetter(); } for (int i = 2; i < 6; i++) { object.objectCode[i] = '0' + RandomDigit(); } } int main() { GetRandomSeed(); object_t object1; // Print objectCode string to screen for (int i = 0; i < 6; i++) { printf("%c", object1.objectCode[i]); } printf("\n"); return 0; } 

对于C来说,我有点幼稚,所以我非常感谢你能给予的任何帮助。 谢谢。

你错过了对main GenerateCode的调用,这就是打印输出是乱码的原因。

然而另一个问题是,在GenerateCode函数中,参数是按值的,函数不会修改main上的原始结构。 在C中,所有参数都是按值计算的。 你应该传递一个指向结构的指针:

 void GenerateCode(object_t* object) { for (int i = 0; i < 2; i++) { object->objectCode[i] = RandomLetter(); } for (int i = 2; i < 6; i++) { object->objectCode[i] = '0' + RandomDigit(); } } int main() { // ... object_t object1; GenerateCode(&object1); } 

因为您通过值将对象传递给GenerateCode()所以函数仅修改堆栈上的值(即:参数本身),而不是您想要更改的实际对象。 使用指针:

 void GenerateCode(object_t* object) { for (int i = 0; i < 2; i++) { object->objectCode[i] = RandomLetter(); } for (int i = 2; i < 6; i++) { object->objectCode[i] = '0' + RandomDigit(); } } 

并称之为:

 GenerateCode(&object1);