C — Странные символы при создании и записи в файл

#c #system-calls #dot

#c #системные вызовы #точка

Вопрос:

Это моя маленькая программа на C:

 int main(int ac, char **av)
{
  int   fd;

  if ((fd = open("./test.dot", O_RDWR | O_CREAT | O_TRUNC, 0644)) == -1)
  {
    perror("[open]");
    return (-1);
  }
  write(fd, "digraph g {n", sizeof("digraph g {n"));
  write(fd, " a -> b -> cn", sizeof(" a -> b -> cn"));
  write(fd, " b -> dn", sizeof(" b -> dn"));
  write(fd, " }n", sizeof(" }n"));
  close(fd);
}
  

Он открывает файл, записывает что-то и закрывает его.

Это почти работает. Почти. Вот что я получаю, когда проверяю содержимое моего файла:

 digraph g {
^@ a -> b -> c
^@ b -> d
^@ }
^@
  

Кажется, что эти символы появляются после каждой новой строки. Что не так?

Ответ №1:

sizeof("digraph g {n") включает нулевой ограничитель, поэтому строки записываются в файл с '' символом.

Ваш просмотрщик файлов показывает нули, используя ^@ орграф.

Вы вообще не должны использовать sizeof — вместо этого используйте strlen . А еще лучше, используйте соответствующие функции ввода-вывода для записи строк в файлы, не требуя от вас указывать их длину в отдельном параметре. Если вам необходимо использовать write , создайте свою собственную функцию, которая вызывает, strlen за которой следует вызов write , чтобы вы могли избежать двойного ввода строковых констант.

Ответ №2:

^@ Это представление вашего зрителя '' .

Пример: sizeof(" }n") Равно 4. ' ' , '}' , 'n' , '' ,

Ответ №3:

Я думаю, что вместо использования sizeof("string") вам следует использовать strlen("string") .