You've asked two questions. I will address the first one.
Security settings in Linux are often tweaked by each distribution. Therefore when you are looking around the guts of the system you may have a command work on one distribution and fail on another due to security.
You can know in advance if some information in /proc is available by performing an "ls -l" to view the permission settings on the object that you want to access.
Regarding your second question I believe that you get the error on the second argument before the first argument is printed because you have specified a format string. I believe that the printf function in bash, which is different from the printf external command, tries to format the entire output before it prints the first result. So printf evaluates CWD and succeeds, then it evaluates the second argument and fails and gives an error, then it proceeds to print whatever was successfully processed.
You can find more information using the man pages.
Once you are in the man page for bash you can look for the printf command.
But, I could be wrong. I'm no cli expert.