4

Я столкнулся с ситуацией ниже, что я сделал,

  1. Скопировал URL с помощью Ctrl + C (http://stackoverflow.com/users/123456/user)
  2. Сделал новый текстовый файл и нажал переименовать.
  3. Вставил этот URL, используя Ctrl + V, чтобы переименовать его.
  4. Он выдал ошибку, что не может изменить имя файла на имя с / и: ....
  5. Он удалил / и: автоматически и установил имя файла. (httpstackoverflow.comusers123456user)
  6. Затем я открыл текстовый файл и снова нажал Ctrl + V, чтобы вставить URL в файл,
  7. Удивительно, но значение буфера обмена изменилось, например, ниже.

http://stackoverflow.com/users/123456/user

в

httpstackoverflow.comusers123456user

Почему это случилось ? есть идеи? Я использую Windows 10 юбилейное обновление.

1 ответ1

5

Да, я могу воспроизвести это явление. Существует бесплатная программа просмотра буфера обмена, которая позволяет увидеть, что произошло:

  • теперь вы пытаетесь использовать эту строку в качестве имени файла
  • в тот момент, когда появится сообщение об ошибке, вы увидите, что содержимое буфера обмена было изменено на «httpstackoverflow.comusers123456user»:

Это изменение было сделано проводником Windows, который удаляет "неправильные" символы ASCII из строки. Важным моментом здесь является то, что мы получаем содержимое буфера обмена по ссылке (а не по значению как копия), поэтому изменение возможно!

[EDITED]

  • Вопрос: можете ли вы объяснить «по ссылке, а не по значению» немного больше?

Существует два способа передачи параметров в программировании: по значению и по ссылке.

Когда параметр передается по ссылке, вызывающая сторона и вызываемая сторона используют одну и ту же переменную для параметра. Если вызываемый объект изменяет переменную параметра, эффект виден для переменной вызывающего.

Когда параметр передается по значению, вызывающая сторона и вызываемая сторона имеют две независимые переменные с одинаковым значением. Если вызываемый объект изменяет переменную параметра, эффект не будет виден вызывающему.

Буфер обмена Windows может иметь огромный контент: картинки, текст и так далее. Вот почему лучше скопировать только адрес этого блока памяти, а не копию всего содержимого.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .