strlen函数返回类型 - c编程

时间:2014-03-31 04:20:51

标签: c

我是C编程的新手,并试图从概念上理解它。 我跑到了以下函数原型和其他类似的函数原型

size_t strlen( const char *s );

我不太了解返回类型 size_t

6 个答案:

答案 0 :(得分:3)

size_t基本上是无符号整数类型。请参阅thisthis

答案 1 :(得分:2)

它基本上是unsigned int

将语义视为“可以保存足够大的数字以存储内存块的最大大小的类型”

答案 2 :(得分:1)

size_t是C中的数据类型。它是无符号的,能够保存至少与对象最大大小一样大的整数值。

所以你永远不会“溢出”做size_t x = sizeof something;,它是用于数组索引的正确类型,或malloc的参数。

您的<stddef.h>标题由typedef定义,但这一事实与其使用无关。您应该编写不依赖于typedef实际上是什么的代码。

答案 3 :(得分:1)

根据C99,§7.17

   size_t 是在 stddef.h 头文件中定义的,是sizeof运算符结果的无符号整数类型。此外,用于size_t 的类型不应具有大于signed long int 的整数转换等级,除非该实现支持足够大的对象以使其成为必需。

答案 4 :(得分:1)

ISO C11 7.19(在标准的早期迭代中非常相似)定义size_t因此:

  

sizeof运算符的结果的无符号整数类型。

您可以通过添加stddef.hstdio.h来获取它。它不是unsigned int,而是unsigned shortunsigned long,它是一种独特的类型,虽然可以很容易地推广到其他类型。

它只是一个无符号整数类型,从0SIZE_MAX(在stdint.h中定义,如果你想使用它)包含值,保证至少{{ {1}}。

有些人实际上坚持使用65535int而不是unsigned int,但如果你想要真正的便携式源代码,这在技术上并不是一个好主意。

标准规定,除非您的实现处理真正大的对象,否则转换等级应小于或等于size_t - 因为signed long int很可能是更高的转换排名高于signed long int,您可能会丢失信息。

当然,你很少会处理大小超过signed int的东西,这就是为什么你可以大部分逃脱它。

答案 5 :(得分:0)

size_t是c中的无符号int返回类型。