我有一个包含来自popen()的输入的FILE指针。我想将所有输入放入char * str,但我不知道如何做到这一点(C编程新手)。
void save_cmd(int fd) {
char buf[100];
char *str;
FILE *ls;
if (NULL == (ls = popen("ls", "r"))) {
perror("popen");
exit(EXIT_FAILURE);
}
while (fgets(buf, sizeof(buf), ls) != NULL) {
//Don't know what to do here....
}
pclose(ls);
}
我想我不得不在while循环中连接,但是如果我事先不知道总大小(我想将整个结果保存在char * str中),这怎么可能呢?如果有人有关于如何做到这一点的指示,我将非常感激。
答案 0 :(得分:3)
因此,在您的代码中,您已在buf
。
现在你想要在* str变量中正确使用它。
你需要为它分配内存然后复制。这是一个例子:
void save_cmd(int fd) {
char buf[100];
char *str = NULL;
char *temp = NULL;
unsigned int size = 1; // start with size of 1 to make room for null terminator
unsigned int strlength;
FILE *ls;
if (NULL == (ls = popen("ls", "r"))) {
perror("popen");
exit(EXIT_FAILURE);
}
while (fgets(buf, sizeof(buf), ls) != NULL) {
strlength = strlen(buf);
temp = realloc(str, size + strlength); // allocate room for the buf that gets appended
if (temp == NULL) {
// allocation error
} else {
str = temp;
}
strcpy(str + size - 1, buf); // append buffer to str
size += strlength;
}
pclose(ls);
}