我有一个文件指针,它包含来自popen()的输入。我想把所有的输入都放到一个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),这怎么可能呢。如果有人对如何做到这一点有什么建议,我将不胜感激。
最佳答案
所以在您的代码中,您已经捕获了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);
}
关于c - 将来自popen()的输入读入C中的char *,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26932616/