значения мусора в файле при использовании системного вызова - PullRequest
0 голосов
/ 03 февраля 2019

Я получаю значения мусора, запустив этот код

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main()
{
    int fd,k;
    fd=open("hello.txt",O_WRONLY|O_CREAT|O_TRUNC);
    char a[1000];
    scanf(" %s",a);
    k=write(fd,a,sizeof(a));
    close(fd);      
}

, почему я получаю значения мусора в этом файле hello.txt, когда я запускаю эту программу и ввожу строку в качестве ввода?

1 Ответ

0 голосов
/ 03 февраля 2019

Поскольку sizeof() возвращает объем памяти a, который равен 1000.

a создано в стеке, и его содержимое не определено.После scanf() только первая часть этого стека мусора перезаписывается.

Вам нужно сделать write(fd, a, strlen(a)) или strlen(a) + 1, если вы хотите также написать разделитель строки C \0, которыйдобавляется в конец a.

Пожалуйста, проверьте возвращаемые значения op open(), scanf() и write(), чтобы убедиться, что все шаги выполняются без ошибок.См. Справочные страницы для их возвращаемых значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...