将文件复制到C中的字符串中

时间:2016-04-09 06:53:07

标签: c popen fgets

我正在尝试将内存信息读入c中的字符串中,并且我遇到了一些麻烦。这是我现在拥有的。

FILE * fpipe;
long length;
char * command = "free";
fpipe = (FILE*) popen(command, "r")));

fseek(fpipe, 0, SEEK_END);
length = ftell(fpipe);
fseek(fpipe, 0, SEEK_SET);
bufer = (char*) malloc(length);

char line[128];
if(fpipe)
{
    while(fgets(line, sizeof line, fpipe))
    {
        strcat(buffer, line);
    }
} 

我可以打印行,但不能将其添加到缓冲区。在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

稍微修改了我以前的评论,现在我们可以看到你的代码问题:如果你有一个管道,你只能寻找前进,而不是向后。一旦你找到了最后,你就不能再回头了,所有的数据都会丢失。

相反,您需要在每次迭代时动态分配和reallocate缓冲区。

答案 1 :(得分:0)

您正在从文件中读取二进制数据。因此,您不能将其视为以空字符结尾的字符串。

使用memcpy()代替strcat。

答案 2 :(得分:0)

这是一个有效的例子:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{

char *command="ls -ltr";
FILE* fp;
char line[128];
char* buffer=NULL; // Buffer to store the string
unsigned int size=0;
fp=popen(command,"r");
while (fgets(line,sizeof(line),fp))
    {
    size+=strlen(line);
    strcat(buffer=realloc(buffer,size),line);
    }

printf("Contents received from pipe\n ");
fputs(buffer,stdout);

free(buffer);
fclose(fp);
return 0;
}