为了账号安全,请及时绑定邮箱和手机立即绑定

C码是多少?

C码是多少?

C
胡子哥哥 2019-06-25 12:48:03
C码是多少?我被弄糊涂了size_t在C中,我知道它是由sizeof接线员。但到底是什么?是数据类型吗?假设我有一个for循环:for(i = 0; i < some_size; i++)我应该用int i;或size_t i;?
查看完整描述

3 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

size_t是无符号类型。因此,它不能表示任何负值(<0)。当你在计算某件事时,你会使用它,并且确信它不会是负面的。例如,strlen()返回size_t因为字符串的长度必须至少为0。

在您的示例中,如果循环索引总是大于0,则使用size_t,或任何其他无符号数据类型。

当您使用size_t对象,您必须确保在所使用的所有上下文中,包括算术,都需要非负值。例如,假设您有:

size_t s1 = strlen(str1);size_t s2 = strlen(str2);

你想找出str2str1..你不能:

int diff = s2 - s1; /* bad */

这是因为分配给diff总是一个正数,即使当s2 < s1,因为计算是用无符号类型完成的。在这种情况下,取决于用例是什么,您最好使用int(或long long)s1s2.

C/POSIX中有一些函数可以/应该使用size_t但不要因为历史原因。例如,第二个参数fgets理想情况下size_t,但是.int.


查看完整回答
反对 回复 2019-06-25
?
浮云间

TA贡献1829条经验 获得超4个赞

size_t可以容纳任何数组索引的类型。

视具体实现而定,它可以是以下任何一种:

unsigned char

unsigned short

unsigned int

unsigned long

unsigned long long

以下是如何size_t定义为stddef.h我的机器:

typedef unsigned long size_t;


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 694 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信