我一直在寻找这个问题的位置,似乎无法找到它/必须忽略一些东西。任何帮助将不胜感激。
#define MAX_LETTERS 26
char alphabet[MAX_LETTERS];
void initialize_alphabet(char *a) {
char *p;
char current_letter = 'a';
for (p=a;p<(a+MAX_LETTERS);p++) {
*p = current_letter++;
}
}
void reverse_print_alpha(char *b) {
static var = 0;
char *p;
var?(p=NULL):(p=b);
var ^= 1;
initialize_alphabet(p);
for (p=(b+MAX_LETTERS-1);p>=b;p--) {
printf("%c",*p);
}
printf("\n");
}
int main(void) {
int i = 0;
while (i++<10) {
reverse_print_alpha(alphabet);
}
}
答案 0 :(得分:2)
我看到你至少有两个问题。
1)您永远不会在主要功能中将int i
初始化为0
。如果你使用for循环而不是在那里使用for循环,那么循环会更明确。在这种情况下你会自己发现错误。
2)您每次迭代都会在p
函数中递增*p
和initialize_alphabet()
。也就是说,首先它正在运行:
*p = current_character++;
会将字符p
和current_character
两个点递增。其次,它正在运行:
p++
传递了之前指向的内存。
我不明白你在任何这些函数中做了什么,因为应该是整数的变量是字符,反之亦然。我认为你可以从这些函数中脱离一步,手工编写你认为你的代码在每个循环中所做的事情,并将它与每个循环更改的实际变量进行比较,或者通过使用调试器或许多打印语句。一旦你找到了这两个分歧的地方,你就能自己解决所有问题。
答案 1 :(得分:0)
啊,我发现有人卡在C291测验8上。
之所以不起作用,部分原因是因为i,但主要是因为您没有为字母和p分配内存。默认情况下,它们都指向0x0,专用于操作系统。由于内存地址无效,因此您需要分配一个不同的内存地址。
编辑:移动主功能中的字母INSIDE的声明。