gpt4 book ai didi

无法理解为什么这会导致错误

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

我有一个很大的音乐目录,它列在一个名为 op 的文件中。我已经能够构建一个命令,该命令将使用一些创造性的数学和 date 命令的纳秒输出从 op 文件中随机选择一首歌曲。它在命令行中运行良好:

sed -n $((10#$(date +%N)%$(wc -l /shared/southpark/music/op|cut -d ' ' -f 1)))p /shared/southpark/music/op

我想在 c 程序中包含此命令并使用 popen 读取该行。

#include <stdio.h>
#include <string.h>

int main (int argc, char *argv[])
{
char command[201];
char buf[501];
FILE *fp;

strcpy(command, "sed -n $((10#$(date +%N)%$(wc -l /shared/southpark/music/op|cut -d ' ' -f 1)))p /shared/southpark/music/op");

if((fp = popen(command, "r")) == NULL)
{
fprintf(stderr, "music_player: popen failed\n");
return(1);
}

if(fgets(buf, sizeof(buf), fp) == NULL)
{
fprintf(stderr, "music_player: fgets failed\n");
return(1);
}

printf("%s\n", buf);
pclose(fp);
return(0);
}

但是当我运行它时,出现以下错误:

sh: 1: arithmetic expression: expecting EOF: "10#271445839%2278"
music_player: fgets failed

我该怎么做?我不明白错误消息。

最佳答案

popen 使用

执行您的命令
/bin/sh -c "command"

并且您的 sh 不理解 10# 基本转换前缀。您之前一直在 bash 中运行该命令。

要修复,您有两个选择:

  1. 丢弃不必要的 10# 前缀(默认)以实现 sh 兼容性
  2. 使用bash:

    popen("bash -c 'command'", ...)

关于无法理解为什么这会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30930533/

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