Hide implementation details: Implementation that is hidden from the user so that one cannot affected from any change to code
Choose a small orthogonal set of primitives: Limit code to a minimal having functions or methods performing same tasks and capabilities
Don't reach behind the user's back: User interface should not invilve anything that the user is unaware of.
Do the same thing the same way everywhere: User interface should be consistent across all platforms and functionality, along with the programming style.
Q2.
Code is unclear and has bad variable names. It can only have a line buffer with 200 characters because of the allocated memory, along with limited to 20 fields
Q3.
Programming style and variable names are more clear and easier to follow. Also includes comments.
Q4.
You cannot parse 2 different CSV files at the same time because of the way the program is written. You cannot read each line individually.
Q5.
C++ implementation will not solve this problem. Although it will solve the issue of limited allocated memory in the original C program, it still doesn't handle errors empty fields
Q6.
Yes, it does adhere to the guidelines for a good interface.