Массив для копирования массива с использованием указателей

0

Я пытаюсь скопировать некоторые элементы из одного массива в другой и таким образом он работает, но он копирует весь массив, когда указатель указывает только на один элемент. Это код:

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", как это возможно? Он может принимать только два элемента?

  • 3
    C или C ++? Выбери один.
  • 0
    Вы не завершили buffer1
Показать ещё 5 комментариев
Теги:
arrays

1 ответ

8
Лучший ответ

Как это вообще возможно? Он может принимать только два элемента?

Да, и эти два элемента были напечатаны успешно.

Однако, поскольку ни один из этих элементов не является '\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';

Ещё вопросы

Сообщество Overcoder
Наверх
Меню