我对我的小c程序有疑问:
#include <stdio.h>
#include <stdlib.h>
int main() {
int c, len;
int max = 100;
char *buffer = malloc(max);
for (len = 0; (c = getchar()) != EOF; len++) {
buffer[len] = c;
if (len == max - 1) {
buffer = realloc(buffer, (len + max));
if (buffer == NULL) {
printf("Error: Out of memory!\n");
return 1;
}
max += 100;
}
}
buffer[len] = '\0';
for (; len >= 0; --len) {
printf("%c", buffer[len]);
}
printf("\n");
free(buffer);
return 0;
}
我的任务是编写一个插入文本并向后输出文本的程序。 如果分配的内存出现问题,则应出现错误消息。 根据我在大学的测试报告,输出的第一行是1个字符太长,我无法确定这个问题的原因,我正在寻求一些建议和帮助
答案 0 :(得分:1)
首先,您应该了解您的问题。您有以下诊断:
输出的第一行是1个字符太长
这还不够!你应该做一个具体的例子。如果你给你的程序一些小的输入,例如abc
,它会输出什么?它应该输出什么?这不像“1个字符太长”那样抽象,并且可以调试。
您的程序有一个错误的错误:
buffer[len] = '\0';
...
printf("%c", buffer[len]);
它将输出的第一个字符是空字符\0
。它可能在屏幕上不可见(它是一个"unprintable"字符),所以要调试它,你最好让你的输出更详细,如下所示:
printf("Character '%c', whose code is %d\n", buffer[len], buffer[len]);
请注意以下使调试更容易的功能:
%d
)将输出其代码并帮助您调试不可打印的字符您的程序有多个错误。使用上述想法逐个重现和隔离错误。另请阅读this。