I'll respond by rewriting the wiki article on the matter:
http://wiki.osdev.org/C_Library
First of all, you should decide whether you want a
good operating system, or just
a operating system. If you want a good one, that means you should likely write your own libc, or port one of the real high-quality libcs (and perhaps not do that if they aren't good enough). Or, if you don't want to surpass existing operating systems, you can use whatever libc gets the job done.
That's why I said “Don't use newlib” in my user page. I assume you wish to make a good operating system. I don't want to generally recommend not doing things well. See the warranty section on my user page. :P
I didn't spell it out clearly in the article, but the situation isn't very good. newlib is supposedly a piece of **** compared to a real, excellent libc. GNU libc is big and not terribly impressive in terms of quality, but would give you less problems when porting GNU software that inexplicitly only works well with glibc. pdclib is decent, but only does the standard C parts, you'll have to supply the POSIX parts yourself. If you want a real libc of decent quality, may I recommend musl? It's not the easy path and there it requires a lot of your kernel, you basically have to implement the Linux system call ABI. That's actually not too bad, and you can enhance musl if you wish.
I have personally written my own libc. It was a considerable effort, and while it's hardly perfect yet, it really does get the job done and I'm continuously improving it and its standards compliance. A lot of third party software works with it currently. I'd recommend using it, but it has no kernel portability layer: It is well integrated with my operating system by design. That's a bit of a sad fact, if a libc is good and tailored for one system, it's not reusable; and if it is reusable, it has a portability layer that makes things more complicated and can't take advantage of a single system.