Я использовал fread для чтения всего файла, но я получаю только первый из него, почему это так?
Мой код:
#define MAXBUFLEN 4096
int main(){
int ret =0;
char source[MAXBUFLEN + 1];
FILE *fp = fopen("test", "r");
if (fp != NULL)
{
rewind(fp);
ret = fread(source, 1, MAXBUFLEN, fp);
printf("ret : %d %s",ret,source);
fclose(fp);
}
return 0;
}
Текст файла:
/# cat test
/usr/sbin/sshd-p 1234-o LoginGraceTime=30-o ClientAliveInterval=600-o ClientAliveCountMax=0-o TCPKeepAlive=no-o MaxSessions=1-o MaxStartups=1-o MaxAuthTries=3
Вывод моей программы:
ret : 167 /usr/sbin/sshd
Как проще всего прочитать весь этот файл? (что не является стандартным и не заканчивается на \n)?
'\0'байт сразу после/usr/sbin/sshdв файле? - person Sander De Dycker   schedule 06.08.2018fread(source, 1, MAXBUFLEN, fp);- person Jean-François Fabre   schedule 06.08.2018fread()не помещает строку вsource[]. Использование содержимогоsource[]в виде строки ошибочно. - person AlexP   schedule 06.08.2018rewind(fp)не нужен. - person Steve Summit   schedule 06.08.2018sshd-pтам, где я ожидал быsshd -p, и=30-oтам, где я ожидал бы=30 -o». Вполне вероятно, что вы каким-то образом вставляете символы'\0'вместо пробелов при объединении аргументов. Это объяснило бы симптом, который вы видите. - person Steve Summit   schedule 06.08.2018printf("ret : %d %s",ret,source);возникает проблема, если текстовый файл не содержит ни одного нулевого символа. В этом случаеprintf()пытается напечататьsourceкак строку, однако неизвестно, чтоsourceимеет завершающий нулевой символ. - person chux - Reinstate Monica   schedule 06.08.2018fwrite(source, 1, ret, stdout);- person chux - Reinstate Monica   schedule 06.08.2018