【发布时间】:2014-12-26 21:24:04
【问题描述】:
我正在从一本书 C 编程:现代方法中学习 C。现在我正在练习关于数组的低谷练习。其中一个练习是编写一个以不同方式打印输入消息的过滤器。
到目前为止(参见下面的代码),一切正常,直到字符数超过 44,然后它会打印随机符号。如果字符数低于 44,则一切正常。我完全不知道为什么会这样。问题出在哪里,有什么解决办法?
int i = 0, k = 0;
char message[k],ch;
printf("Enter a message: ");
while(toupper(ch = getchar()) != '\n')
{
message[k] = ch;
k++;
}
printf("In B1FF-speak: ");
for (i = 0; i <= k - 1; i++)
{
switch(toupper(message[i]))
{
case 'A':
printf("4");
break;
case 'B':
printf("8");
break;
case 'E':
printf("3");
break;
case 'I':
printf("1");
break;
case 'O':
printf("0");
break;
case 'S':
printf("5");
break;
default:
printf("%c", toupper(message[i]));
break;
}
}
【问题讨论】:
-
char message[k]k设置为 0?这是一个严肃的问题吗??? -
@lurker:
char message[k]其中k==0具有未定义的行为。 -
@barakmanos:OP 显然假设更改
k的值会更改数组的长度。这不是一个完全不合理的假设。它恰好是不正确的。 -
@KeithThompson 好的,知道了。但在这两种情况下都是一个坏主意。
-
@KeithThompson:是的,我现在明白了。有时,了解受试者的思维方式以解释其问题所在,这本身就是一项具有挑战性的任务(您似乎已经处理得很好)。我想太多年的编程使我能够“超越界限”看到其他感知(在这种特定情况下的自然感知,如果我可以补充的话,现在我明白了你的观点) - 有点生硬。 P.S.:有趣的是,显而易见的事情有时却让你不知所措。