我'为我的考试而学习,我遇到了一个结果不错的代码。我理解main()中前两行的结果,但是我不明白为什么我的电脑打印出像图片一样的答案!!
#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("");
}
答案 0 :(得分:1)
因为c / c ++中的数组没有明确的边界,所以在printstring的第三次调用中,数组s
是一个零长度的char数组。当解引用值使用下标0..10时,它指的是内存中的随机存储,其值取决于编译器及其生成的目标文件的结构。在你的情况下,字符串“s [%d]”就在s
引用后的3个字节的位置。