【发布时间】:2015-07-18 00:23:10
【问题描述】:
C 中的字符串似乎是我的弱点,再次需要你们的帮助。我应该把它包含在我的第一个中,所以对此我深表歉意。
所以我有这个可以正常工作的函数,它用集合 {r, e, s, e, t} 中的随机字符填充一个字符串并返回它:
char *inputString()
{
static char string[6];
const char *digits = "reset";
int i;
for (i = 0; i < 5; i++)
{
string[i] = digits[ rand() % 4 + 0 ];
}
return string;
}
所以 string[5] 处的字符是 '\0',对吗?而string[1]到string[4]是其他字符(r、e、s、e、t)的随机组合。
现在,我有另一个函数调用这个函数。它的这些目的是试图让 printf 语句执行:
other_fxn()
{
char *s;
while (1)
{
s = inputString();
if (s[0] == 'r'&& s[1] == 'e' && s[2] == 's' && s[3] == 'e' && s[4] == 's'
&& s[5] == '\0')
{
printf('worked!\n');
break;
}
}
}
主要:
{
srand(time(NULL));
other_fxn();
}
它编译得很好,但循环永远运行,if 语句永远不会执行。有人可以帮我弄清楚为什么它不会执行。再次感谢。
【问题讨论】:
-
您不想将
s = inputString();放入循环中吗? -
是的,很抱歉我第一次在这里打印错了。它在循环内。
-
您从未真正分配 string[5] = '\0'。因此,您从 input_string 返回的 c 字符串可能不会以空值结尾。这也可能导致您的无限循环行为。
-
@TimothyMurphy
string是static。所以它被初始化为0。 -
如果您修复损坏的 printf 语句并添加缺少的标题,代码 works as expected。