Я читаю курс по Си (это голландский, так что, возможно, вы не знаете), и там есть небольшое упражнение на понимание поведения строк. Поэтому я создал небольшую программу на Си, чтобы начать упражнение, но уже первый вывод моей программы (для меня) удивителен.
Исходный текст моей программы на 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