我遇到了以下情况,我所做的是,
- 使用 Ctrl + C 复制网址 (
http://stackoverflow.com/users/123456/user
) - 创建一个新的文本文件并单击重命名。
- 使用 Ctrl + V 粘贴该 URL 并重命名。
- 它出现一个错误,无法将文件名更改为带有 / 和 : .... 的名称。
- 它自动删除 / 和 : 并设置文件名。(
httpstackoverflow.comusers123456user
) - 然后我打开文本文件并再次按 Ctrl + V 将 URL 粘贴到文件中,
- 令人惊讶的是剪贴板的值已经改变,如下所示。
http://stackoverflow.com/users/123456/user
到
httpstackoverflow.comusers123456user
为什么会发生这种情况?有什么想法吗?我正在使用 Windows 10 周年更新。
答案1
是的,我可以重现这种现象。有一个免费剪贴板查看器让你看到发生了什么:
- 首先它显示一个链接“https://stackoverflow.com/users/123456/user“:
- 现在你尝试使用该字符串作为文件名
- 当错误信息显示时,你会看到剪贴板的内容已更改为“httpstackoverflow.comusers123456user”:
Windows 资源管理器已做出此更改,它从字符串中删除了“错误”的 ASCII 字符。这里的重点是,我们获取了剪贴板的内容引用(而不是通过价值作为副本),这就是为什么改变是可能的!
[已编辑]
- 问题:您能否进一步解释一下“按引用而不是按值”?
有编程中传递参数的两种方式:按值和按引用。
当参数通过引用传递时,调用者和被调用者使用相同的变量对于参数。如果被调用者修改了参数变量,则调用者的变量可以看到其效果。
传递参数时按价值,调用者和被调用者有两个具有相同值的独立变量. 如果被调用者修改了参数变量,其效果对于调用者来说是不可见的。
Windows 剪贴板可以包含大量内容:图片、文本等等。因此,最好仅复制此内存块的地址而不是复制全部内容。