2014-03-05 25 views
0

字符串数组的随机值我想有一个字符串数组,有什么东西从数组中返回一个随机字符串,所以是这样的:选择用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

代替

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]); 
+0

谢谢@尼克!我只是查找了sprintf(),并且我清楚了,这是否意味着如果我打印出''out',它会是我想要的字符串? –

+0

@CassidyWilliams:是的,这是正确的。 – legends2k

+0

@Nick我回到这个,如果我想返回'out'呢?我会有一个函数,如: 'char * getOut(){return * out; '',还是别的? –

3

您对长度的计算错误。 initialblow不是char数组但char*

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

而且,你不能连接字符串,这样在C.你必须使用strcat来连接字符串到现有的一个。为此,可以传递一个额外的char []参数并填充结果或进行一些动态分配以返回char*

+1

我总是发现记得'sizeof(initialblow)/ sizeof(initialblow [0])''更容易。 –

2

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

initialblow[rand() % length1]char

","char*

secondblow[rand() % length2]char

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