我一直在将测试功能设计为分配的一部分,但我只停留在一个部分上。基本上,为了使循环退出,我需要将状态设置为9,将s字符串设置为“ reset \ 0”。在测试中,我可以达到状态9,这意味着inputChar()可以按需工作。另一个测试表明inputString()正在生成有效的字符串,但是s无法正确获取该值。我认为这一定是一个指针问题,但经过一阵子修补后,我无法弄清楚是什么。
int RandInt(int low, int high) {
return low + rand() % (high - low + 1);
}
char inputChar()
{
return RandInt(' ', '}');
}
char *inputString()
{
int i;
char* iString[6];
for (i = 0; i< 5; i++){
iString[i] = RandInt('e', 't');
}
iString[5] = '\0';
return iString;
}
void testme()
{
int tcCount = 0;
char *s;
char c;
int state = 0;
while (1)
{
tcCount++;
c = inputChar();
s = inputString();
printf("Iteration %d: c = %c, s = %s, state = %d\n", tcCount, c, s, state);
if (c == '[' && state == 0) state = 1;
if (c == '(' && state == 1) state = 2;
if (c == '{' && state == 2) state = 3;
if (c == ' '&& state == 3) state = 4;
if (c == 'a' && state == 4) state = 5;
if (c == 'x' && state == 5) state = 6;
if (c == '}' && state == 6) state = 7;
if (c == ')' && state == 7) state = 8;
if (c == ']' && state == 8) state = 9;
if (s[0] == 'r' && s[1] == 'e'
&& s[2] == 's' && s[3] == 'e'
&& s[4] == 't' && s[5] == '\0'
&& state == 9)
{
printf("error ");
exit(200);
}
}
}
运行s的输入将永远运行,因为s只是单个字符,而不是“ reset \ 0”
函数inputString返回其自动变量的地址,该变量将在您尝试使用它时立即引起未定义的行为。您可以修改inputString函数以接收指针作为其参数,并通过此函数提供其输出。
例如:
void inputString(char *iString)
{
int i;
for (i = 0; i< 5; i++){
iString[i] = RandInt('e', 't');
}
iString[5] = '\0';
}
并使用以下逻辑调用该函数:
char iString[6];
inputString(iString);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句