在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]);