int数组在结尾处显示奇数值

时间:2014-06-30 22:12:20

标签: c arrays sizeof

我正在运行此代码用于有关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 *

的int数组显示中的奇怪值

1 个答案:

答案 0 :(得分:4)

您使用此类循环访问数组末尾

for ( i=0; i <= x; i++) {

应该是

for ( i=0; i < x; i++) {
             ^
             ^

因为数组索引是零基础的。

超出数组末尾的读取是未定义的行为。