【发布时间】:2020-11-24 14:15:54
【问题描述】:
变量的值在输入“abcdefghijklmnop”后自动变化,按要求为16个字符。我不明白为什么它会自动改变。如果能为此提供任何帮助,我将不胜感激。
代码如下:
void test(void){
char arr[16];
int magic = 42;
printf("magic = %d\n", magic);
printf("Enter a character string: ");
getString(arr, 16 + 1);
printf("The length of string [%s] is %d\n", arr, stringLength(arr));
printf("magic = %d\n", magic);
}
int main(int argc, char * argv[])
{
test();
printf("\n");
return 0;
}
谢谢
【问题讨论】:
-
你告诉函数有
16+1元素,但只有16。不要忘记字符串终止符。数组char arr[16]只能存储长度为15的字符串。 -
什么变量改变了?
getString()是什么? -
您需要更改数组的大小,不要忘记
\0 -
您通过访问数组
arr越界观察到未定义行为。要存储 16 个字符的 C 字符串,您至少需要数组大小 17 -
当您在数组边界之外写入时,可能发生的许多坏事之一是您覆盖了恰好位于内存中该地址的其他变量。专注于如何让你的代码一开始就不会那样做。