问个c语言的类型问题。

2012-04-30 22:41:39 +08:00
 donbe
什么时候应该用 unsigned char * ?
对于一字符串来说 char * 不是更好吗?
是不是 unsigned char * 表示的不一定是字符串?
强制转换 unsigned char * 和 char * 会不会带来什么隐患?
3381 次点击
所在节点    程序员
7 条回复
xupefei
2012-04-30 22:47:17 +08:00
一般来说不会有什么问题,不过当你尝试把其中一个字符当做数值来比较时,char可能会出现负数

另外,根据编译器的不同,char可能被解释为 signed 或 unsigned ,那么当被解释为前者时,你的字符串就出现负数,就出问题了……
xupefei
2012-04-30 22:49:24 +08:00
这个问题给忘了:
> 什么时候应该用 unsigned char * ?
如果你是在定义字符串,任何时候都应该表明 unsigned
ototsuyume
2012-04-30 22:51:25 +08:00
什么时候应该用 unsigned char * ?
二进制数据流

对于一字符串来说 char * 不是更好吗?


是不是 unsigned char * 表示的不一定是字符串?


强制转换 unsigned char * 和 char * 会不会带来什么隐患?
一般来说不会,但还是尽量别这样干,难免会有例外情况
simy
2012-04-30 23:45:53 +08:00
unsigned char我还用来当整数用的。。好吧,忽略我。。
Hyperion
2012-05-01 00:46:38 +08:00
都一样用就是了, 但是...

char test[] = {177, 161, '\0'};
printf("%s %d%d", test, (int)test[0], (int)test[1]);

unsigned char test[] = {177, 161, '\0'};
printf("%s %d%d", test, (int)test[0], (int)test[1]);

-_- 不做解释...
xuefei2062
2012-05-01 01:02:01 +08:00
char有可能是unsigned char,也有可能是signed char,根据系统实现而不同,所以要移植性还是加unsigned或者signed,至于用什么,看你需求
donbe
2012-05-01 02:08:47 +08:00
v2ex很给力啊,得到这么多回答, 基本明白了。

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

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

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

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

© 2021 V2EX