请不要测试直接回答 echo "a" > a.txt 该文件大小多少字节?

2017-06-22 12:29:31 +08:00
 nikoo
感觉有点意外,两个问题:
1、这是为什么?
2、这合理吗?
6684 次点击
所在节点    问与答
75 条回复
zwpaper
2017-06-22 12:32:50 +08:00
2 字节,一个 a,一个换行。

我去测试一下来回复
zwpaper
2017-06-22 12:34:58 +08:00
就是 2 字节
1. "a" + "换行" = 2
2. 合理
nikoo
2017-06-22 12:35:32 +08:00
@zwpaper 是的,今天在生产服直接编辑文件就因为这个末尾的\n 导致了 BUG,vim 编辑器也有这个“问题”
lululau
2017-06-22 12:35:33 +08:00
不一定,看当前环境的字符编码是什么吧
ldbC5uTBj11yaeh5
2017-06-22 12:36:14 +08:00
这个问题太弱智了。我来提供一个巨坑人的题目

sizeof('A') 和 sizeof("A") 谁大?

我见过编程十年的经验的老手都被套路了。
nikoo
2017-06-22 12:37:27 +08:00
按理说 echo 单一字符不应该强制加换行在末尾吧。
ETiV
2017-06-22 12:39:11 +08:00
C 里 sizeof 一个是 char,一个是 char*
ldbC5uTBj11yaeh5
2017-06-22 12:40:12 +08:00
sizeof 这道题我最喜欢去套路那些"熟悉 C/C++"的程序员,鲜有能够滴水不漏完完整整说出来龙去脉的哥们。
40huo
2017-06-22 12:40:34 +08:00
为什么 windows 下是 6 字节。。
we000
2017-06-22 12:41:37 +08:00
@nikoo 你说的 Vim 的问题, 可能需要用 vim -b 以 binary 形式打开
ldbC5uTBj11yaeh5
2017-06-22 12:41:38 +08:00
@ETiV 哥们,你也被套路了。这个题目埋了不少雷。C vs C++, 32bit vs LP64 等等呢。
40huo
2017-06-22 12:42:25 +08:00
啊,win 下还会把引号写进去。。
laoyur
2017-06-22 12:44:04 +08:00
echo -n "a"
echo "a"
在终端敲一下试试
xss
2017-06-22 12:44:23 +08:00
请使用 echo -ne 'a' > a.txt
不熟指令, echo 不背这锅
lfk0000
2017-06-22 12:44:45 +08:00
好像换行还分 3 种写法?
想起茴香豆了...
wevsty
2017-06-22 12:46:44 +08:00
@ETiV
@jigloo
"a"是被当作字符数组处理的,结尾有 /0。
直接 sizeof("a")是求了整个字符数组包括 /0 的大小,所以实际上是 2 个字节
sizeof(‘ a ’)是 1 应该没有什么争议。
当然,这都是不考虑平台,编码的情况下,如果加上这些,还有些变数。
ldbC5uTBj11yaeh5
2017-06-22 12:47:57 +08:00
sizeof(‘ a ’)是 1 应该没有什么争议。

呵呵,你试过了吗?
Tink
2017-06-22 12:49:00 +08:00
跟操作系统有关
ldbC5uTBj11yaeh5
2017-06-22 12:50:24 +08:00
一般来说,当被套路的程序员意识在 c 里面 sizeof('A') 是 sizeof(int), 而在 c++ 里面是 sizeof(char) 的时候。

我都会追问一句,“为什么这么设计?” 能答上来的话,我就不和对方在 c/c++ 基础知识上纠缠了。蛤蛤
lcdtyph
2017-06-22 12:58:25 +08:00
@jigloo #19 我只知道这是两个语言标准规定的字面值类型不同导致的……至于为什么这么设计,还请赐教

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370278

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX