• uis@lemm.ee
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    3 个月前

    If n is smaller than the string length (as in: distance to first null byte) then you’re bound to have garbage in your return destination

    Wha? N is just maximum length of string to copy. Data after dst+n is unchanged.

    In retrospect null-terminated strings were a mistake, but so were many other things, at some point you just have to accept that there’s hysterical raisins everywhere.

    All hail length-prefixed strings!

    • barsoap@lemm.ee
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      3 个月前

      Data after dst+n is unchanged.

      Sure but that means the part before that is garbage because you have a null terminated string without terminator.

      Or at least that’s how I see it. If your intention isn’t to start and end with a null-terminated string you should be using memcpy. Let us not talk about situations where CHAR_BIT != 8 that’s not POSIX anyway.

      Even better, just avoid doing string manipulation in C.

      • uis@lemm.ee
        link
        fedilink
        arrow-up
        1
        ·
        3 个月前

        Let us not talk about situations where CHAR_BIT != 8 that’s not POSIX anyway.

        Yeah, let’s not talk about 20-bit one’s complement ints.