作者zxvc (zxvc)
站内Electronics
标题Re: [问题]问个c语言问题
时间Sun Feb 25 20:04:07 2007
※ 引述《invalid (everlasting)》之铭言:
: ※ 引述《adddream (哆啦A孟)》之铭言:
: : 了解
: : 真是太感谢您罗
: : 不过想再追问一下
: : (1)为舍'\0'是表示false阿
: 更精确一点,在C/C++及一些其他语言中
: 'x'代表的型态是int (不是char*)
: 所以应该要说"\0"比较适当一点
: "\0"的意思就是使该字元的ascii code值为\後面的数字
: C/C++中也有一些方便记忆的序列,例如\n,\r,\b...
: 最早的C是没有boolean的型别的
: 所以用int来代表真假
: 0为假,非0为真
我刚才查了一下C的规格书--ISO 9899:1999。
如果我没会错意的话:
『""』包起来的东西是一个array of character type,
它会传给lvalue一个address(也就是它的rvalue),
所以一般来说"\0"不等於0。
可以用这个程式码来测试把"\0"传回的东西当作指标运算,应该会印出0:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <stdio.h>
int main()
{
int a = (int) "\0";
char c = *((char *) a);
printf("%d", c);
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
换言之使用『""』建立字串时,程式会先在记忆体中配制一块空间给该字串(字元阵列)。
并把第一个字元的位址传给lvalue。
(以上部份是我参考规格书的想法,如有会错意请见谅,我不是C语言高手。)
而'\0'应该为0,虽然我在C规格书查不到。不过可以测试这个程式码:
if('\0' == 0) printf("Yes.\n");
另外我还查到规格书说『false』会被macro expands to 0,
『false』被定义在stdbool.h里面。
: : (2)还有就是通常在阵列里头结尾(不管是指哪种阵列)不都是会加上'\0'吗?
: : 还是说是我记错了@@'
: 这只有C-like string才是这样
: 这只是为了方便以最小的记忆体操作字串的技巧
: 你高兴自创一个不用\0的string也可以
: 只是就不能用string.h里面的函式啦
: 另外"\0"可以想成是signature,通常用来代表特定区块的边界
: 譬如说FAT32分割区中会以0xAA55代表分割区的开始
: 要注意的就是通常只有"文字"资料才会"只"利用signature来切割
: (FAT32其实还有其他栏位去进行辨认)
: 如果你的资料是binary形式的
: 通常就会使用类似HTTP协定加注资料长度的方式来辨别区块的边界
: 要不然就要使用strip的方式,将冲突的signature先替换掉
--
《金刚经》
离一切诸相,则名诸佛。
http://web.cc.ncu.edu.tw/~93501025/jg.doc
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.201.94
※ 编辑: zxvc 来自: 140.115.201.94 (02/25 20:04)
※ 编辑: zxvc 来自: 140.115.201.94 (02/25 20:05)
1F:推 adddream:感谢 ^^ 02/25 21:28