我在编写一些代码时遇到了这个问题。我声明了两个数组,一个称为 start 的数组被初始化为字符串 hello。第二个数组称为 user,应该用 for 循环声明为 _。但是,我的名为 start 的数组已修改,因此我的输出如下所示:
Printed word: Hello
Array Length: 5
_____o
为什么我的起始数组被重写了?抱歉,如果这是我正在自学的菜鸟问题。
#include <stdio.h>
#include <string.h>
int main(void)
{
size_t length = 0;
char start [] = {"Hello"};
printf("\nPrinted word: %s\n", start);
length = strlen(start);
printf("Array Length: %zi\n", length);
char user[] = {0};
for(size_t x = 0; x < length; x++){ //starting here
user[x] = '_';
}
printf("%s\n",start);
}
最佳答案
您没有在 user
数组中分配任何空间,它的长度为 1,因为您只提供了一个初始值。因此,当您写入它时,您就是在越界并溢出到其他变量使用的内存中。
此外,对于带引号的字符串,不需要大括号,它应该是:
const char start[] = "Hello";
或
const char *start = "Hello";
最后,即使有空间,你的循环也没有正确终止 user
,所以随后的 printf()
with %s
期望以 0 结尾的字符串将调用未定义的行为。
关于c - 一个数组影响另一个,两个数组分别声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16296616/