使用指针进行数组复制的数组

use*_*537 0 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);
Run Code Online (Sandbox Code Playgroud)

当我打印到指向控制台的*指针时,我得到"W"但是当我将缓冲区1打印到控制台时,我得到了"W",这怎么可能呢?它只能采取两个元素?

Lig*_*ica 8

这怎么可能呢?它只能采取两个元素?

是的,这两个元素都成功打印出来了.

但是,由于这两个元素都不是'\0',printf不知道它已经到达你的数组的末尾(怎么知道?!)并且一直从你的计算机的内存读取,直到它到达\0某个地方.

在某种程度上它可以工作,但它只在指针指向一个元素时复制整个数组

指针只是"指向一个元素"; 当你使用printf格式化程序"%s"(用于字符串)时,语言必须假设所述元素旁边有其他元素(例如,在数组中),并且它将继续递增指针并打印,直到它找到'\0'到告诉它停止.

简而言之,你超越了缓冲区.

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

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

std::cout << buffer[0] << '\n' << buffer1 << '\n';
Run Code Online (Sandbox Code Playgroud)