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

2017-06-22 12:29:31 +08:00
 nikoo
感觉有点意外,两个问题:
1、这是为什么?
2、这合理吗?
6685 次点击
所在节点    问与答
75 条回复
QAPTEAWH
2017-06-22 13:02:27 +08:00
然后这个文件占 4K 大小?
ldbC5uTBj11yaeh5
2017-06-22 13:03:40 +08:00
@lcdtyph c 如此设计的原因和 fgetc 为什么返回值是 int 相同。
c++ 又改成 char 的原因是因为要做操作符重载,不然 cout << 'A' 输出数字就尴尬了。
qichunren
2017-06-22 13:04:03 +08:00
sizeof(‘ a ’)是 1,我试过了,g++, 64 位。
ldbC5uTBj11yaeh5
2017-06-22 13:05:05 +08:00
@qichunren 大兄弟,回帖要看帖。
wevsty
2017-06-22 13:06:20 +08:00
@jigloo
查了一下看来我还是被套路了~

@lcdtyph
估计这么设计是因为 C 里面更多的是从底层数据考虑吧,字符本身也是也是数字,只是认为的规定了数字这么解释代表了这个意思。
holyghost
2017-06-22 13:07:09 +08:00
@jigloo

SO 上有一些关注这个的讨论:
https://stackoverflow.com/a/3672617
https://stackoverflow.com/a/433988

我猜大意是 C 中的 char 会被当作 int 来处理,C++中处理得更加严谨了一些。
不知道是否靠谱?
yws112358
2017-06-22 13:57:20 +08:00
占用磁盘空间和文件系统有关 最小 512 字节 实际大小看情况
after1990s
2017-06-22 14:04:23 +08:00
sizeof 其实是个运算符,可以被重载的。所以 sizeof('a')不一定返回 1.
lcdtyph
2017-06-22 14:08:00 +08:00
@after1990s #28 不是所有运算符都能被重载的,而且 sizeof 不是严格的运算符。
after1990s
2017-06-22 14:08:57 +08:00
@after1990s 好像并不可以。。。
jason19659
2017-06-22 14:33:50 +08:00
alias cat echo
crab
2017-06-22 14:49:38 +08:00
@40huo 引号,还有引号后的空格+回车+换行
0asis
2017-06-22 15:08:16 +08:00
x64
gcc 下,int *a = 3; sizeof(a) == 8;sizeof(1)==4, sizeof('a') == 4, sizeof("a") == 2
g++下,sizeof(1) == 4, sizeof('a')==1, sizeof("a") == 2
jixiangqd
2017-06-22 15:15:38 +08:00
```bash
echo -n "a"
```
cxbig
2017-06-22 15:53:58 +08:00
echo 默认带回车
1. echo -n 'a'
2. printf 'a'
ldbC5uTBj11yaeh5
2017-06-22 16:02:09 +08:00
@0asis 嗯,这个就是这个问题蕴含的另一个套路了,一般如果答题者试图像这样过关的话,接下来是 LP64, ILP64, LLP64 的套路问题等着。

所以我才说,这个问题要答的“滴水不漏”颇为坑人。
zhangxaochen
2017-06-22 16:05:40 +08:00
@0asis @jigloo 请教,为啥 sizeof("a") ==2 呢? 本以为 "a" 给粗的是指针地址,以为 == 4 来着。。
0asis
2017-06-22 16:26:38 +08:00
@zhangxaochen #37 可能是 a\0 两个字节?其实我也一直以为对“”取 sizeof 会得到一个 char 的指针的大小
0asis
2017-06-22 16:29:44 +08:00
@0asis #38 不对不对,sizeof 应该是不会包括\0 的,我也迷了
0asis
2017-06-22 16:43:09 +08:00
@0asis 似乎就是#38 的想法- -,尴尬了

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

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

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

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

© 2021 V2EX