You are viewing a single thread.
View all comments View context
3 points
*

How on earth should a newcomer know that the letter “n” in that word stands for number without having to google it?

By looking at the difference between strcpy and strncpy. Preferably, though, you should simply learn C before writing C.

The gist of is is that strcpy takes a null-terminated string and copies it somewhere, while strncpy takes a zero-terminated string and copies it somewhere but will not write more than n bytes. strncpy literally has exactly one more parameter than strcpy, that being n, hence the name. If n is smaller than the string length (as in: distance to first null byte) then you’re bound to have garbage in your destination, and to check for that you have to dereference the pointer strncpy returns and check if it’s actually null. Yay C error handling.

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.

permalink
report
parent
reply
2 points
*

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!

permalink
report
parent
reply
2 points
*

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.

permalink
report
parent
reply
1 point

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.

permalink
report
parent
reply

Programmer Humor

!programmer_humor@programming.dev

Create post

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

  • Keep content in english
  • No advertisements
  • Posts must be related to programming or programmer topics

Community stats

  • 7.7K

    Monthly active users

  • 978

    Posts

  • 38K

    Comments