C/C++ CSV Writer
Introduction
This project was created in order to enable a CSV writing API for C programmers.
The CSV format is commonly easy to parse/write, but there are special cases which are less-trivial, and that makes it recommended to use a standard tested writer
API & Usage Example
Usage Example
#include <stdio.h> #include "csvwriter.h" int main() { char *firstLine[] = {"this", "is the first line", "that ends here"}; char *secLine[] = {"this field, contains a comma", "this field, \" contains a quote", "this field\ncontains a newline"}; char *thirdLine[] = {"this line is crazy", "12345\"\"sdgdsag,adad\"\"\"\nabcdefg", "\","}; char **data[] = {firstLine, secLine, thirdLine}; // If you like to output to STDOUT, use NULL as filename CsvWriter *csvWriter = CsvWriter_new("Book1.csv", ",", 0); int i, j; for (i = 0 ; i < 3 ; i++) { for (j = 0 ; j < 3 ; j++) { if (CsvWriter_writeField(csvWriter, data[i][j])) { printf("Error: %s\n", CsvWriter_getErrorMessage(csvWriter)); return 1; } } CsvWriter_nextRow(csvWriter); } CsvWriter_destroy(csvWriter); return 0; } The result in Excel:

API
// Create a new instance of CsvWriter // Returns an instance of CsvWriter // // filePath - path to CSV file - pass NULL to print the output to STDOUT // delimiter - pointer to a single char to be considered as delimiter. If NULL is passed, using default, which is a comma (,) char // append - If file is already existing, append to it, instead of overriding CsvWriter *CsvWriter_new(const char *filePath, const char *delimiter, int append); // Add a field to the current row // Returns 0 in case of success. Non-zero in case of failure // // csvWriter - an instance of CsvWriter // field - a c-string that contains the text to be written int CsvWriter_writeField(CsvWriter *csvWriter, char *field); // Start a new CSV row (should not be called for the first row) // Returns 0 in case of success. Non-zero in case of failure // // csvWriter - an instance of CsvWriter int CsvWriter_nextRow(CsvWriter *csvWriter); // Get the error message, for the last occurred error // Returns an c-string // // csvWriter - an instance of CsvWriter const char *CsvWriter_getErrorMessage(CsvWriter *csvWriter); // Destroy and release memory of a CsvWriter instance // // csvWriter - an instance of CsvWriter void CsvWriter_destroy(CsvWriter *csvWriter);