What is size_t in C?

前端 未结 13 1905
礼貌的吻别
礼貌的吻别 2020-11-22 05:00

I am getting confused with size_t in C. I know that it is returned by the sizeof operator. But what exactly is it? Is it a data type?

Let\'

13条回答
  •  余生分开走
    2020-11-22 05:14

    size_t is an unsigned type. So, it cannot represent any negative values(<0). You use it when you are counting something, and are sure that it cannot be negative. For example, strlen() returns a size_t because the length of a string has to be at least 0.

    In your example, if your loop index is going to be always greater than 0, it might make sense to use size_t, or any other unsigned data type.

    When you use a size_t object, you have to make sure that in all the contexts it is used, including arithmetic, you want non-negative values. For example, let's say you have:

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

    and you want to find the difference of the lengths of str2 and str1. You cannot do:

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

    This is because the value assigned to diff is always going to be a positive number, even when s2 < s1, because the calculation is done with unsigned types. In this case, depending upon what your use case is, you might be better off using int (or long long) for s1 and s2.

    There are some functions in C/POSIX that could/should use size_t, but don't because of historical reasons. For example, the second parameter to fgets should ideally be size_t, but is int.

提交回复
热议问题