Я читаю курс C (он голландский, поэтому, вероятно, вы не будете знать), и есть небольшое упражнение, чтобы понять поведение строки.Поэтому я создал небольшую 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()
использовал их с %c
и заметил, что символы изменились, поэтому после этого я использовал %d
для отображения целочисленных значений.
2) Почему эти значения меняются?Я ничего больше не делаю, кроме того, что копирую ту же строку, используя strcpy()
на стр.
Спасибо за то, что нашли время прочитать, и даже больше за тех, кто отвечает!
Йорн