In the article on buffer overflows, the author says use strncpy() instead of strcpy. I’ve found that to be only slightly less dangerous than straight strcpy(). The reason is that if you copy the max number of characters to the destination, then it stops, which is good, but it does not append the null character, which is bad when you try to use the destination later.
Is it still like that in C99? If so, care still needs to be taken with strncpy().