在C语言中选择字符串数组的随机值
我想要一个字符串数组,从数组中返回一个随机字符串,如下所示:在C语言中选择字符串数组的随机值,c,C,我想要一个字符串数组,从数组中返回一个随机字符串,如下所示: char* initialblow[] = {"hey", "hi", "hello"}; // this might be bigger or smaller char* secondblow[] = {"Bob", "Phil", "Sue"}; int length1 = sizeof(initialblow)/sizeof(char); int length2 = sizeof(secondblow)/sizeof
char* initialblow[] = {"hey", "hi", "hello"}; // this might be bigger or smaller
char* secondblow[] = {"Bob", "Phil", "Sue"};
int length1 = sizeof(initialblow)/sizeof(char);
int length2 = sizeof(secondblow)/sizeof(char);
...
return initialblow[rand() % length1] + ", " + secondblow[rand() % length2]
我是不是把一些很明显的事情搞砸了?我很长时间没碰C了,也弄不清楚这个问题。你对长度的计算是错误的
initialblow
不是char
的数组,而是char*
的数组:
int length1 = sizeof(initialblow)/sizeof(*initialblow);
此外,在C语言中不能像这样连接字符串。必须使用
strcat
将字符串连接到现有字符串中。为此,要么传递一个额外的char[]
参数并用结果填充它,要么执行一些动态分配以返回一个char*
您不能像这样连接initialblow[rand()%length1]+,“+secondblow[rand()%length2]
这样连接。你在这里做的是char+char*+char
——这是非法的
initialblow[rand()%length1]
是一个char
”,“
是一个字符*
secondblow[rand()%length2]
是一个char
如果你真的想返回一个字符串,那么就创建一个(参见Nick的答案)。但是,如果您想将它返回给调用者,而不是在函数中使用它,那么您必须使用动态内存分配
int length1 = sizeof(initialblow)/sizeof(char);
使用
而不是
return initialblow[rand() % length1] + ", " + secondblow[rand() % length2]
使用类似
char out[256];
sprintf(out, "%s,%s", initialblow[rand() % length1], secondblow[rand() % length2]);
我总是觉得更容易记住
sizeof(initialblow)/sizeof(initialblow[0])
。谢谢@Nick!我只是查了一下sprintf(),所以我很清楚,这是否意味着如果我要打印出的话,它就是我想要的字符串?@Nick我回到这里,如果我想返回的话怎么办?我会有一个类似于:char*getOut(){return*out;}
的函数,还是其他函数?
char out[256];
sprintf(out, "%s,%s", initialblow[rand() % length1], secondblow[rand() % length2]);