为什么最后一个代码返回这样的结果? (在C中)

时间:2017-10-17 12:41:59

标签: c

我'为我的考试而学习,我遇到了一个结果不错的代码。我理解main()中前两行的结果,但是我不明白为什么我的电脑打印出像图片一样的答案!!

在那里做什么是[%d] ??? result of the code

#include <stdio.h>

void printstring(char s[]) {
    int i;

    for (i = 0; i < 10; i++)
        printf(" s[%d]", i);
    printf("\n");

    for (i = 0; i < 10; i++)
        printf("%5c", s[i]);
    printf("\n");

    for (i = 0; i < 10; i++)
        printf("%5X", s[i]);
    printf("\n");
    printf("\n");
}

main() {
    printstring("I am beautiful");
    printstring("beautiful");
    printstring("");
}

1 个答案:

答案 0 :(得分:1)

因为c / c ++中的数组没有明确的边界,所以在printstring的第三次调用中,数组s是一个零长度的char数组。当解引用值使用下标0..10时,它指的是内存中的随机存储,其值取决于编译器及其生成的目标文件的结构。在你的情况下,字符串“s [%d]”就在s引用后的3个字节的位置。