我正在尝试将一些元素从一个数组复制到另一个数组,并且它确实有效,但是当指针只指向一个元素时,它会复制整个数组。这是代码:
char buffer[64], buffer1[2];
char* pointer;
strcpy(buffer, "Word");
pointer = buffer1;
*pointer = buffer[0];
printf("%c\n", *pointer);
printf("%s\n", buffer1);
当我打印到指向控制台的*指针时,我得到“W”,但是当我将缓冲区1打印到控制台时,我得到了“W”,这是怎么回事?它只能采取两个元素?
答案 0 :(得分: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';