C输出太长

时间:2016-11-28 10:51:45

标签: c memory-management output

我对我的小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个字符太长,我无法确定这个问题的原因,我正在寻求一些建议和帮助

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