c - 一个数组影响另一个,两个数组分别声明

标签 c arrays

我在编写一些代码时遇到了这个问题。我声明了两个数组,一个称为 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/

相关文章:

javascript - JS中如何写一个具有三个索引的数组?

c - 如何将字符串从函数传递到主函数?

c - 编程指针问题

c++ - 使用位掩码组合枚举值

Java char 数组相等不起作用

arrays - 随机获取数组元素

C编程: ouput two strings as two columns next to each other

c - 指向结构的指针数组的动态分配

我可以将 Intel 语法的 x86 程序集与 GCC 一起使用吗?

c++ - 如何正确释放二维数组 C++