我正在尝试将内存信息读入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);
}
}
我可以打印行,但不能将其添加到缓冲区。在此先感谢您的帮助。
答案 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;
}