C fread不读取整个文件

C fread不读取整个文件,c,ubuntu,fread,C,Ubuntu,Fread,我用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);

我用
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,它不是标准单词,而是在Linux中单独记录的^@。该代码由以下内容固定:

#include <stdio.h>

void removeNewLine(char * str,int len);

#define MAXBUFLEN 4096

int main(){
    char source[MAXBUFLEN + 1];
    FILE *fp = fopen("test", "r");
    int ret =0;
    if (fp != NULL) 
    {
        rewind(fp);
        ret = fread(source, 1,MAXBUFLEN, fp);
        removeNewLine(source,ret);
        fclose(fp);
    }
    return 0;
}

void removeNewLine(char * str,int len){
    int i=0;
    for(i=0; i<len;i++) {
        if((int)str[i]==0 )
        {
            str[i]=' ';
        }
    }
    str[len] = 0;
    printf("%s",str);
 }
#包括
无效删除线(字符*str,内部长度);
#定义MAXBUFLEN 4096
int main(){
字符源[MAXBUFLEN+1];
文件*fp=fopen(“测试”,“r”);
int-ret=0;
如果(fp!=NULL)
{
倒带(fp);
ret=fread(源,1,MAXBUFLEN,fp);
移除管线(来源,ret);
fclose(fp);
}
返回0;
}
无效删除行(字符*str,内部长度){
int i=0;

对于(i=0;iis,在文件中的
/usr/sbin/sshd
之后可能有一个
'\0'
字节?还可以打印
fread(source,1,MAXBUFLEN,fp)的返回值;
示例输入中显示了158个可见字符。fread计数167。这一差异可以通过在每个“-”之前的\0上解释在可见的示例输入中,最后一个空格或0。即,请回答Sanders问题。看起来您正在调试已生成的命令行字符串。看起来您构建该字符串的方式有问题。我注意到类似于
sshd-p
的情况,我希望
sshd-p
,以及
=30-o
的情况e我希望
=30-o
'。很可能在连接参数时插入了
'\0'
字符,而不是空格。这可以解释您看到的症状。“读取整个文件的最简单方法?”-->代码就是这样做的。这里的问题不在于读取,而在于打印。