gpt4 book ai didi

c - 将管道文件内容传递给未知大小的 char *(动态分配)

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:15 25 4
gpt4 key购买 nike

我有一个来自管道 (popen) 的 FILE *,我想将它传递给 char *artist。FILE 中的信息大小未知,因此应使用 malloc()

FILE *tmp1;
char *artist;
tmp1 = popen("cmus-remote -Q | grep 'tag artist' | sed s/'tag artist'/''/g | sed '1s/^.//'", "r");

我该怎么做?

最佳答案

这样做的方法是使用临时缓冲区读取 block 并将它们附加到艺术家,如下所示:

char buf[8192];
char *artist = NULL;
size_t len = 0, total_len = 0;
FILE *fp;

fp = popen("cmus-remote -Q | grep 'tag artist' | sed s/'tag artist'/''/g | sed '1s/^.//'", "r");

while (!feof(fp)) {
if ( fgets(buf, sizeof(buf), fp) == NULL )
break;
len = strlen(buf);
artist = realloc(artist, len+1); /* +1 for \0 */
if (artist == NULL) {
fprintf(stderr, "Ran out of memory\n");
exit(-1);
}
strncpy(artist+total_len, buf, len+1); /* concatenate the string at the end of artist */
total_len += len;
}

关于c - 将管道文件内容传递给未知大小的 char *(动态分配),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25027819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com