#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
int main () {
char grade[5];
char name[30];
int fd = creat("notas.txt", 0644);
if (fd == -1) {
perror("notas.txt");
return 1;
}
while (1) {
scanf("%s %s", name, grade);
if (strcmp(name, "end") != 0) {
write(fd, name, 30);
write(fd, "\t", 1);
write(fd, grade, 5);
write(fd, "\n", 1);
} else {
close(fd);
return 0;
}
}
}
Hi everyone. I am trying to get into *nix Kernel API programming and I wrote the above program. It reads names and grades from the command line and then writes them to a file. However, the file is garbled, I can only catit (doesn’t open with a text editor) and my data appears among a a torrent of garbled random chars. After cating the file, my prompt also has a bunch of leading random chars like 1C2;1C3(…).
Why does this happen?
Thank you all.
write()writes bytes to a file, not specifically strings. The third parameter towrite()is the number of bytes to write.write(fd, name, 30)thus writes 30 bytes to the file, but the string innameis shorter, so a bunch of random characters which happen to be in memory get written to the file.In C the length of a string is indicated by putting a nul character (
'\0', which is 0) at the end of the string, and can be checked with thestrlen()function, so you need to writewrite(fd, name, strlen(name)).