返回带有随机选项和局部变量的 char 函数
Posted
技术标签:
【中文标题】返回带有随机选项和局部变量的 char 函数【英文标题】:return a char function with random options and local variables 【发布时间】:2016-01-27 09:12:06 【问题描述】:我创建了一个单元测试工具来测试我的程序。我希望它能够随机测试每次运行,但我不知道如何去做。这是我的想法,但我被困在下一步该怎么做,任何指导将不胜感激。
int main (void)
int testNumber = 1; //for testing
char carName[] = "";
double carCost = 0;
carName = carChosen (testNumber);
carCost = assessCost (carName); //assessCost takes in the car name and checks what cost of the car will be (error checking so only certain cars can be chosen)
return 0;
“testNumber”通常会随时间播种以创建从 1 到 15 的不同数字,但在这种情况下,它将是“1”用于测试。
这是我遇到的下一个问题。在这个函数中会有 15 个不同的汽车选项,它会根据随机创建的数字返回一个。
char carChosen (int randNum)
char carOne[] = "Honda";
char carTwo[] = "Ford";
if (randNum == 1)
return carOne; //local variables, not going to work...
else if (randNum == 2)
return carTwo; // Again, these return's are here to better represent what I'm trying to create but failing to do so..
我知道你不能返回局部变量,我能做些什么呢?
【问题讨论】:
您将返回值设置为char
,并尝试返回char[]
。如果 randNum 不同于 1 & 2,你还需要返回一些东西
@Robolisk 您的 C++ 代码看起来像 C。如果确实是 C++,只需使用 std::string
(并在 main(void)
中删除 void
)。
@Biffen 它是 C++,我刚刚开始熟悉它。我会研究一下这些对我有什么帮助,谢谢
@Thomas 我明白这一点,但我把它放在那里是因为我被卡住了,不知道还能做些什么来表达我的观点。 else return 应该有一些东西你是对的,我只是为了测试目的而使用它,但良好的实践表明我应该这样做。谢谢你的建议。
char carName[] = ""
不是 C++ 字符串,它是一个以空字符结尾的字符数组,由单个字符(显然是空字符)组成。您可以更改此数组的内容,但由于它是作为单字符数组静态分配的,因此您唯一能做的就是更改该单字符(这显然会使其成为非空终止数组个字符)。简单来说,您需要阅读更多关于空终止(C 样式)字符串的内容。或者,如果您指定的语言确实是 C++,那么请改用 std::string
。
【参考方案1】:
这个
void carChosen (int randNum, char * out)
char carOne[] = "Honda";
char carTwo[] = "Ford";
if (randNum == 1)
strcpy(out, carOne);
else if (randNum == 2)
strcpy(out, carTwo);
//.. handle other cases
打个电话
char carName[MAX_LEN];
carChosen (testNumber, carName);
如果你有很多条件要测试,也许你最好使用switch
而不是嵌套的if..else
。
我以为是 C 看代码,如果你使用 C++,你可以从你的函数中返回 std::string
对象,没有任何问题。
【讨论】:
那将是一个空白,不是吗? 比一个开关更好,一个二维字符数组 这工作非常出色 Giorgi Moniava!谢谢@Thomas 第二个字符数组是什么意思?.... >.> 创建一个名为cars
的数组,把你的车放进去,然后strcpy只cars[randNum]
@Robolisk
这是一个弱设计,因为没有检查缓冲区溢出(这样做会很痛苦)【参考方案2】:
正如其他人所指出的,您的代码看起来像 C 代码。如果您想使用 C++,请阅读 std::string 并使用它。
如果您想继续使用您的方法(这是一种非常类似于 C 的方法),那么您需要更好地了解 C 字符串的工作原理。即,它们如何存储在内存中以及char
与char *
的不同之处与char array[]
的不同之处。
暂时搁置大部分内容,根据您的示例代码,我的第一个猜测是您实际上不会修改字符串的内容。你只想要字符串 for 它的内容,但你不会改变它们。如果这是准确的,那么您可以使用常规的 char *
变量来保存指向 char 字符串的指针。您只需要一个字符串的副本,因此您可以传递一个指向该副本的指针,每个人都可以从该指针中读取。一种快速的方法是直接使用字符串文字。
const char* carChosen (int randNum)
if (randNum == 1)
return "Honda";
else if (randNum == 2)
return "Ford";
else
return "Audi";
请注意,我们返回的是 const char *
。 const
只是表明我们不会修改指向的字符串。我们绝对不想这样做,因为它指向字符串文字(不允许修改)。一旦你得到了 carChosen 返回的 const char *
,你可以将它传递给其他函数,例如评估成本。
【讨论】:
以上是关于返回带有随机选项和局部变量的 char 函数的主要内容,如果未能解决你的问题,请参考以下文章
C 语言C 项目开发代码规范 ( 形参合法性判断 | 函数返回值局部变量 | 函数中不用全局变量 | 函数中使用局部变量接收形参 | 函数返回值 | 形参作返回值 | 形参返回值处理 )