c++ - 使用指针进行数组到数组的复制

标签 c++ arrays

我正在尝试将一些元素从一个数组复制到另一个数组,并且在某种程度上它确实有效,但是当指针仅指向一个元素时它会复制整个数组。这是代码:

char buffer[64], buffer1[2];
char* pointer;
strcpy(buffer, "Word");

pointer = buffer1; 
*pointer = buffer[0];
printf("%c\n", *pointer);

printf("%s\n", buffer1);

当我将 *pointer 打印到控制台时,我得到“W”,但是当我将 buffer1 打印到控制台时,我得到“WÌÌÌÌÌÌÌÌÌÌWord”,这怎么可能呢?只能取两个元素?

最佳答案

how is that even possible? It can only take two elements?

是的,这两个元素已成功打印。

但是,由于这些元素都不是 '\0'printf 不知道它已经到达数组的末尾(它怎么知道?!) 并不断从计算机的内存中读取数据,直到它到达某处的 \0

in a way it does work but it copies the whole array when the pointer only points to one element

指针只会“指向一个元素”;当您使用像 "%s" 这样的 printf 格式器时,它用于字符串,语言必须假定所述元素具有其他元素在它旁边(比如,在一个数组中),它会不断递增指针并打印,直到它找到一个 '\0' 来告诉它停止。

简而言之,您超出了缓冲区。

在 C 中,确保为终止 NULL 字节留出足够的空间;在 C++ 中,使用 std::string:

const std::string buffer  = "Word";
const std::string buffer1 = buffer;

std::cout << buffer[0] << '\n' << buffer1 << '\n';

关于c++ - 使用指针进行数组到数组的复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24088314/

相关文章:

c++ - std::thread::join 是否保证写入可见性

ios - 通过确保每次使用数组的不同元素来创建 for 循环

python - Numpy:将数组的每个元素与所有其他元素进行比较(± 常数)

javascript - 递归过滤具有不同属性的对象数组

c++ - 当 const-ref 和 value 存在时,为什么转换运算符会导致不明确的重载

c++ - 如何将 remove_if 与 !函数的(不是函数的)

c++ - STL c++ 中不同类型列表声明的错误

python - numpy 数组中的匹配元素

c++ - 动态数组删除旧指针并将其设置为新数组 C++

c++ - 为什么变量用最大值而不是零初始化