C这个功能有什么作用?

时间:2010-10-31 09:56:11

标签: c

为什么9是char输入必须[9]

int getInput (void) {
    char input[9];
    fgets(input, 9, stdin);
    return atoi(input + 6);
}


void printHeader(void) {
    printf("Content-type: text/html\n\n");
    printf("<html>\n");
    printf("<head>\n");
    printf("<title>%s</title>\n", PROGRAM_NAME);
    printf("</head>\n");
    printf("<body style='padding:25px;'>\n");
}

void printFooter(void) {
    printf("</body>\n");
    printf("</html>\n");
}

int main() {
    int n=0;
    int last1 = 0;
    int last2 = 1;
    int current;
    int max_n = getInput();

    printHeader();
    printf("<h2>%s</h2>\n", PROGRAM_NAME);
    printf("The first %d Fibonacci numbers are: \n", max_n);
    printf("<br />");

    while (n < max_n) {
        if (n == 0) {
            current = 0;        
        } else if (n == 1) {
            current = 1;
        } else {
            current = last2 + last1;
        }
        printf("%d, ", current);
        last1 = last2;
        last2 = current;
        n++;
    }
    printf("...\n");
    printFooter();
    return 0;
}

1 个答案:

答案 0 :(得分:2)

不是。它只是意味着缓冲区是9个字符。 fgets需要知道避免缓冲区溢出。它可以读取8个字符,因为NUL需要1个字符。写作会更清晰:

int getInput (void) {
    char input[9];
    fgets(input, sizeof(input), stdin);
    return atoi(input + 6);
}

避免冗余。

如果使缓冲区变小,显然可能无法读取所有输入,这就是程序无法正常工作的原因。如果它更大,则可能存在(更多)未使用的缓冲区空间。

+ 6表示atoi开始读取第7个字符。