V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  geelaw  ›  全部回复第 16 页 / 共 177 页
回复总数  3531
1 ... 12  13  14  15  16  17  18  19  20  21 ... 177  
2023-09-21 16:38:15 +08:00
回复了 sugarsalt 创建的主题 程序员 求教, bat 脚本里,设了 chcp 仍然有中文无法正确显示
这段代码相当糟糕,是利用 findstr 这个工具显示文件名,因此你传入的字符串必须是合法的文件名,而且显示的时候会覆盖当前目录下的同名文件——总之就是个不定时炸弹。

如果必须要用 batch ,推荐 https://gist.github.com/mlocati/fdabcaeb8071d5c75a2d51712db24011
否则可以考虑 PowerShell

另外请不要在 bat 里面 chcp ,这是在劫持用户的 console ,而且我没找到如何让 Windows 以固定的编码读取 batch 的功能,它或许永远是以系统代码页读取 batch 并运行的,也可能是按照当前代码页一次读取一行运行的。考虑如下 UTF-8 的 batch:

chcp 932>nul 2>nul
chcp 65001>nul 2>nul && echo ¿

其中 echo 的字符是 U+00BF ,它的 UTF-8 编码是 0xC2 0xBF ,一开始的 932 是 Windows 的 Shift JIS 实现,在这个代码页里 0xC2 不是合法的开头字节,因此在默认的日语 Windows 上执行它会产生不可预知的后果。

实际效果是打印出来的并不是倒转的问号,而是 ツソ 这两个符号。
2023-09-21 15:37:26 +08:00
回复了 lurenn 创建的主题 macOS WPS 创建的文档无法被 one drive 同步?
可能要取消选定 OneDrive 的“让 Office 程序处理 Office 文件的同步”?
2023-09-21 12:43:23 +08:00
回复了 polobug 创建的主题 问与答 win11 的 DevDrive 有人体验过吗
@mmdsun ReFS 也不算很新了吧,Windows Server 2012 以来的技术了,而且多数 Windows 程序都采用的是 Win32 ,根本无需关心文件系统是什么。

我记得很久以前(几年前)看过 ReFS 会直接删除损坏的文件,搜索了一下只找到今年的一个版本 https://www.zhihu.com/question/594562714/answer/2975876927 观望中
2023-09-20 14:52:24 +08:00
回复了 xJogger 创建的主题 发音 GUI 的三种读法
@geelaw #24 更正一下… gēi wū yī 是更“接地气”的说法,严格来说是 gê wu yi (gê̄ wū yī)。
2023-09-20 14:47:32 +08:00
回复了 xJogger 创建的主题 发音 GUI 的三种读法
汉语读法是 gēi wū yī,见拉丁字母的汉语读音规定(即汉语拼音名称音)。
2023-09-20 12:46:27 +08:00
回复了 xuelang 创建的主题 C++ C++ 链接符号决议 -- 自以为懂了,结果...
@xuelang #18 汉语“决议”是“会议所确定的较重大的事项”的意思,在计算机技术方面应该理解为复杂的选择过程,比如“重载决议”是可接受的说法,因为要根据形参列表和实参列表从多个可能的选项里根据一系列不那么直接的规则选出最合适的。链接里的 symbol resolution 的 resolution 应该译作“解析”,因为这个过程只是简单地查找符号的定义,不存在复杂的规则。
2023-09-19 22:43:05 +08:00
回复了 LuckyPocketWatch 创建的主题 Linux 申请大内存,程序直接被系统干掉,求指教
怎么确定是系统结束了进程,还是进程结束了自己?你试过 try catch 了吗? allDevs.max_size() 是多少?
2023-09-19 22:09:16 +08:00
回复了 xuelang 创建的主题 C++ C++ 链接符号决议 -- 自以为懂了,结果...
@xuelang #15 链接并不能用来挑选(“决议”) A 的这个定义或那个定义,A 自始自终都只有一个定义。
2023-09-19 20:20:00 +08:00
回复了 xuelang 创建的主题 C++ C++ 链接符号决议 -- 自以为懂了,结果...
满足 ODR 的程序,如果同一个名字在多个翻译单元里有定义,那么任意可达的定义都是等价的,因此可以随便选(比如第一个赢)。

随便选最有意义的作用是模板,因为每个使用了某个模板的翻译单元必须包含那个模板的完整定义(需要 SFINAE 和 name lookup ),不能让模板声明在 .hh 里实现在 .cc 里。

更早的时候链接时优化还不流行,因此内联( C++ 意义的 inline )函数可以促进函数在编译时被内联(优化意义的 inline )。

链接并不是“决议”工具。
2023-09-19 20:10:33 +08:00
回复了 xuelang 创建的主题 C++ C++ 链接符号决议 -- 自以为懂了,结果...
无论是看代码还是问 ChatGPT 却不查证都是非常糟糕的学习方法,第一步应该是理解 C++ 标准是如何规定的。

文章里无论是 int sum(int, int) 还是 class Demo 都是非常严重的 ODR violation 。

在 [basic.def.odr]/14 里规定了 (14.1) 非内联非模板函数在多个翻译单元中有定义时 (14) 程序不良,且在非模块中无需报错,这适用于 sum 的情况。

在 [basic.def.odr]/14 里规定了 (14.2) 多个翻译单元中有定义的 class 如果不满足 (14.4) 在所有可达的翻译单元中定义是相同的记号( token )序列,则 (14) 程序不良,且在非模块中无需报错,这适用于 class Demo 的情况。

至于某个具体的编译器、链接器产生的什么行为,不过是巧合罢了。
2023-09-18 19:06:40 +08:00
回复了 LuckyPocketWatch 创建的主题 C++ 如何判断一个 double 有几位?
建议重新思考你的设计。因为 IEEE-754 双精度数里面 0.000001 等于 0.000000999999999999999954748111825886 ,你希望传入这个数的时候得到 6 还是 7 ?
2023-09-18 13:54:04 +08:00
回复了 thisismr2 创建的主题 程序员 问: A 和 B 通过 S 中转来进行消息传递是否安全
@thisismr2 #3 描述不是很清楚,比如谁是攻击者、攻击者有哪些能力(即达到何种安全性)。
最简单的场景:C 可以把 K 告诉 D ,然后 D 把 K 告诉 S 。
2023-09-16 18:14:46 +08:00
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@zzzkkk #47 接续 #50 ,假设数组前面一切可读取的虚拟内存都是 ' ',且假设指针加减运算未定义行为的实现就是访问这些虚拟内存,那么这个程序会因为把 start 减到不可读的虚拟内存地址之后继续读 start 而访问违规,从而崩溃。
2023-09-16 18:07:24 +08:00
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@zzzkkk #47 假设编译器不检查内存,并且数组前面全是空格呢?

另外这个 while 循环写得可以说是乱七八糟了。
2023-09-16 18:05:05 +08:00
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@zzzkkk #38

int a[1];
a + 0; // OK
a + 1; // OK
a - 1; // 未定义行为
a + 2; // 未定义行为

和 (a-1)、(a+2) 有没有被解引用没有任何关系。见 C++ 标准 [expr.add]/4:

When an expression J that has integral type is added to or subtracted from an expression P of pointer type, the result has the type of P.
(4.1) If P evaluates to a null pointer value and J evaluates to 0, the result is a null pointer value.
(4.2) Otherwise, if P points to an array element i of an array object x with n elements ([dcl.array]), the expressions P + J and J + P (where J has the value j) point to the (possibly-hypothetical) array element i+j of x if 0≤i+j≤n and the expression P - J points to the (possibly-hypothetical) array element i−j of x if 0≤i−j≤n.
(4.3) Otherwise, the behavior is undefined.

注意 4.2 要求表达式的结果指向数组对象或者数组末尾之后,不允许数组开头之前。
2023-09-16 17:53:55 +08:00
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@zzzkkk #31 C++ 不存在变长数组,所以 int n; scanf("%d", &n); int a[n]; 是完全错误的,即使 n 输入的是 1 也是错误的。
2023-09-16 17:52:54 +08:00
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@zzzkkk #30 所以你对 char s[25] = "长度为 30 的字符串长度为 30 的字符串"; 出错有什么异议呢?

另外 s 以空格开头的时候,在

while (start > s) {
flag = 0;
while (*start == ' ') start--;

这段代码里面会把 start 减到 s 之前,这也是未定义行为。

https://gist.github.com/GeeLaw/47dea7677eb48e1b9896bfe9d006b5f4
2023-09-16 17:32:24 +08:00
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
请问楼主期待这段代码发生什么?

int a[1];
a[0] = 1;
a[1] = 2;

用超长字符串初始化不够长的字符数组的效果和上面差不多。另外楼主并不是忘了改下标,而是忘了改长度,这是两个不同的概念。

另外 char s[] = "..."; char s2[strlen(s) + 1]; 不是合法的 C++ 代码,没有拒绝编译已经很给面子了。
@dearxe2v #2 这种归约式论证不成立。

考虑 A 使用 B 的公钥加密刚刚通过键盘输入的数据,此时加密算法的随机数和明文并不来自于磁盘,如果使坏者得到了此随机数,则此密文丧失安全性,A 当然希望在加密算法运行完毕后从内存里删除随机数和明文。

另外,内存可能是主动发给外界,而不是被窃听的,例如调试崩溃记录的时候,当然希望内存转储里敏感信息越少越好。

题外话:RSA 加密已经不怎么实用了,主要是安全性弱带来的性能问题。
1 ... 12  13  14  15  16  17  18  19  20  21 ... 177  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3029 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 38ms · UTC 13:56 · PVG 21:56 · LAX 05:56 · JFK 08:56
Developed with CodeLauncher
♥ Do have faith in what you're doing.