我正在运行此代码用于有关sizeof和显示数组值的教学目的;使用char数组看起来一切正常(数组的最后一个元素'0'或NULL没有显示,float数组显示为0.0000 ......但是char数组给了我54417138的最后一个看起来像地址的元素(十六进制等效206F6554)。我试图检索它的内容,假设它是一个地址(参见代码的注释部分)但是出现了堆栈溢出错误,所以我现在迷路了 - 任何帮助都将不胜感激。
#include <stdlib.h>
int main(void) {
int i =0;
int j = 0;
int k = 0;
char name[] = {'T','e','o',' ','G','u','g' };
int z = sizeof(name)/sizeof(name[0]);
printf("%d\n", z);
for ( k=0; k <= z; k++) {
printf("%c", name[k]);
}
for ( k=0; k <= z; k++) {
printf("%c", *(name+k));
}
printf("\n");
int number[] = {1,2,3,4,5,6,7,8 };
int x = sizeof(number)/sizeof(number[0]);
printf("%d\n", x);
for ( i=0; i <= x; i++) {
printf("%d\t", number[i]);
}
for ( i=0; i <= x; i++) {
printf("%d\t", *(number+i));
}
printf("\n");
/*int *ptr = 0x206F65540;
printf("Memory address is: %i\n", ptr);
printf("Content of that address is: %d\n", *ptr);
printf("\n");*/
float number1[] = {1.0, 2.5, 3.1234, 10.10};
int y = sizeof(number1)/sizeof(number1[0]);
printf("%d\n", y);
for (j=0; j <= y; j++) {
printf("%f\t", number1[j]);
}
for (j=0; j <= y; j++) {
printf("%f\t", *(number1+ j));
}
printf("\n");
return EXIT_SUCCESS;
}
这是该程序的输出:
7
Teo Gug Teodor Gug
8
1 2 3 4 5 6 7 8 544171348 1 2 3 4 5 6 7 8 544171348
4
1.000000 2.500000 3.123400 10.100000 0.000000 1.000000 2.500000 3.123400 10.100000 0.000000
请注意544171348 *
答案 0 :(得分:4)
您使用此类循环访问数组末尾
for ( i=0; i <= x; i++) {
应该是
for ( i=0; i < x; i++) {
^
^
因为数组索引是零基础的。
超出数组末尾的读取是未定义的行为。