поведение строк в C

Я читаю курс по Си (это голландский, так что, возможно, вы не знаете), и там есть небольшое упражнение на понимание поведения строк. Поэтому я создал небольшую программу на Си, чтобы начать упражнение, но уже первый вывод моей программы (для меня) удивителен.

Исходный текст моей программы на C :

#include <string.h>
#include <stdio.h>

void printString(char *string)
{
    printf("0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19\n");
    printf("%c ",string[0]);
    printf("%c ",string[1]);
    printf("%c ",string[2]);
    printf("%c ",string[3]);
    printf("%c ",string[4]);
    printf("%c ",string[5]);
    printf("%c ",string[6]);
    printf("%c ",string[7]);
    printf("%c ",string[8]);
    printf("%c ",string[9]);
    printf("%c  ",string[10]);
    printf("%c  ",string[11]);
    printf("%c  ",string[12]);
    printf("%c  ",string[13]);
    printf("%c  ",string[14]);
    printf("%c  ",string[15]);
    printf("%c  ",string[16]);
    printf("%d  ",string[17]);
    printf("%d  ",string[18]);
    printf("%d\n",string[19]);
}

void main(){

    char str[20];

    strcpy(str,"Dag grootmoeder!");
    printString(str);
}

Я скомпилировал с помощью gcc (без специальных переключателей) и запустил программу несколько раз: (Для англоговорящих Dag grootmoeder! == Hi grandma! )

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

D a g   g r o o t m o  e  d  e  r  !    94  -90  111

$./oefString 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

D a g   g r o o t m o  e  d  e  r  !    51  -12  96

$./oefString 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

D a g   g r o o t m o  e  d  e  r  !    -17  -117  28

$./oefString 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

D a g   g r o o t m o  e  d  e  r  !    96  15  -28

$./oefString 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

D a g   g r o o t m o  e  d  e  r  !    -20  -46  -18

$./oefString 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

D a g   g r o o t m o  e  d  e  r  !    68  -75  58

Вот в чем вопрос :

1) Почему я получаю мусорные значения для последних 3 индексов str? Сначала я также printf()'ing их с %c и заметил, что символы изменились, поэтому я использовал %d после этого для отображения целочисленных значений.

2) Почему эти значения меняются? Я ничего не делаю, кроме копирования той же строки с помощью strcpy() в str.

Спасибо, что нашли время прочитать и еще больше спасибо тем, кто ответит!

Jorn

5
задан Sangeeth Saravanaraj 29 December 2011 в 14:29
поделиться