Я пытаюсь скопировать некоторые элементы из одного массива в другой и таким образом он работает, но он копирует весь массив, когда указатель указывает только на один элемент. Это код:
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ÌÌÌÌÌÌÌÌÌWord", как это возможно? Он может принимать только два элемента?
Как это вообще возможно? Он может принимать только два элемента?
Да, и эти два элемента были напечатаны успешно.
Однако, поскольку ни один из этих элементов не является '\0'
, printf
не знал, что он достиг конца вашего массива (как это знать?!) и продолжал читать из вашей памяти компьютера, пока он не достигнет \0
где-то,
в некотором смысле, он работает, но копирует весь массив, когда указатель указывает только на один элемент
Указатели только "указывают на один элемент"; когда вы используете форматировщик printf
такой как "%s"
, который для строки, язык должен предположить, что указанный элемент имеет рядом с ним другие элементы (скажем, в массиве), и он будет продолжать увеличивать указатель и печать пока он не найдет '\0'
чтобы остановить его.
Короче говоря, вы перегрузили буфер.
В C убедитесь, что вы оставили достаточно места для завершающего байт NULL; в C++ используйте std::string
:
const std::string buffer = "Word";
const std::string buffer1 = buffer;
std::cout << buffer[0] << '\n' << buffer1 << '\n';
buffer1