J'ai une fonction:caractère NULL changer le fichier de sortie
int csv_fwrite2 (FILE *fp, const void *src, size_t src_size, unsigned char quote){
const unsigned char *csrc = src;
if (fp == NULL || src == NULL)
return 0;
if (fputc(quote, fp) == EOF)
return EOF;
while (src_size) {
if (*csrc == quote) {
if (fputc(quote, fp) == EOF)
return EOF;
}
if (fputc(*csrc, fp) == EOF)
return EOF;
src_size--;
csrc++;
}
if (fputc(quote, fp) == EOF) {
return EOF;
}
return 0;
}
Fondamentalement, il prend ce qui est dans src et fournit le contenu src dans un fichier (format csv) et le caractère de citation sera ce que l'argument que vous passe c'est.
par exemple.
src = ["name", "age", "gender"]; csv_fwrite2 (fp, src, src_size, '"');
Dans le fichier de sortie, il contiendra: "name","age","gender"
si:
src = ["name", "age", "gender"]; csv_fwrite2 (fp, src, src_size, '|');
alors la sortie est:
|name|,|age|,|gender|
Tout fonctionne, mais, quand je entrer le caractère NULL comme la citation:
csv_fwrite2 (fp, src, src_size, '\0');
`
Au lieu d'écrire le contenu de src dans le fichier sous forme de chaînes, la sortie est quelque chose comme:
006e 616d 6500 2c00 6167 6500 2c00 6765
au lieu de: name,age,gender
Toute pensée?
Does not 'while (src_size) { if (* CSRC == citation) { si (fputc (citation, fp) == EOF) ...} si (fputc (* CSRC, fp) == EOF) ... } 'print' quote' deux fois? – chux
Quel programme/outil avez-vous utilisé pour voir la sortie du fichier? – chux
Astuce: "NULL" est le mieux réservé pour identifier le _null pointeur constant_ 'NULL'. Pour le _null character_, utilisez ''\ 0'' ou _null character_. – chux