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'
字符,而不是空格。这可以解释您看到的症状。“读取整个文件的最简单方法?”-->代码就是这样做的。这里的问题不在于读取,而在于打印。