在C中选择字符串数组的随机值

时间:2014-03-05 11:35:38

标签: 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);

 ...

 return initialblow[rand() % length1] + ", " + secondblow[rand() % length2]

我搞砸了一些非常明显的东西吗?我很长时间没有触及C,也无法弄清楚问题。

3 个答案:

答案 0 :(得分:3)

你的长度计算是错误的。 initialblow不是char的数组,而是char*的数组:

int length1 = sizeof(initialblow)/sizeof(*initialblow);

此外,您无法在C中连接这样的字符串。您必须使用strcat将字符串连接到现有字符串。为此,要么传递额外的char []参数并将其填入结果,要么进行一些动态分配以返回char*

答案 1 :(得分:3)

而不是

int length1 = sizeof(initialblow)/sizeof(char);

使用

int length1 = sizeof(initialblow)/sizeof(*initialblow);

而不是

return initialblow[rand() % length1] + ", " + secondblow[rand() % length2]

使用类似

的内容
char out[256];
sprintf(out, "%s,%s", initialblow[rand() % length1], secondblow[rand() % length2]);

答案 2 :(得分:2)

你不能initialblow[rand() % length1] + ", " + secondblow[rand() % length2]像这样连接。你在这里做的是char + char* + char - 这是非法的。

initialblow[rand() % length1]char

","char*

secondblow[rand() % length2]char

如果你真的想要返回一个字符串,那就做一个(见尼克的回答)。但是,如果您想将其返回给调用者,而不是在函数中使用它,那么您将使用动态内存分配。