我正在阅读一门C语言课程(它是荷兰语的,所以你可能不知道),有一个小练习是为了理解字符串的行为。因此,我创建了一个小的C程序来开始这个练习,但是我的程序的第一个输出已经让我感到惊讶了。
我的C程序源代码:
我使用gcc编译程序(没有特殊的开关),并运行了几次: (对于讲英语的人来说:
这里是问题:
1)为什么我在 str 的最后 3 个索引处得到垃圾值?起初,我也使用
2)为什么这些值会改变?我只是使用
感谢您抽出时间阅读和回复! Jorn
我的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)为什么我在 str 的最后 3 个索引处得到垃圾值?起初,我也使用
%c
打印它们,并注意到字符发生了变化,这就是为什么我随后使用 %d
显示整数值的原因。2)为什么这些值会改变?我只是使用
strcpy()
将相同的字符串复制到 str 中而已。感谢您抽出时间阅读和回复! Jorn