我想要一个字符串数组,并且从该数组返回一个随机字符串,所以像这样:
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,也无法弄清楚问题。
答案 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
如果你真的想要返回一个字符串,那就做一个(见尼克的回答)。但是,如果您想将其返回给调用者,而不是在函数中使用它,那么您将使用动态内存分配。