c - 将 $n 替换为字符串中的 n

标签 c

我的程序将收到类似的命令

./a.out echo $3 $1 ">" log.txt

我需要将 $3 替换为 3 和 1,以便在从标准输入读取时使用后者,此时我的代码如下(此时它只针对一个 $n 执行操作):

int total = argc-1;
int coluna =0;
int i,n,cut,s, pid,status;
char *cmd[total]; 
char buffer[PIPE_BUF];
char col[10];
char field[10];


//passar argumentos para array
for(i=0;i<total;i++) {
    if(i+1 == total) cmd[total+1] = NULL;
    else cmd[i] = argv[i+1];
}
//verify for $n
char *tmp = cmd;
for(i=0;i<total-1;i++) {
    if(sscanf(tmp,"[$]%s",col) == 1) coluna = atoi(col);
}

代码执行的其他所有内容都有效(在没有 $n 和其他一些测试的情况下尝试过),但我没有得到正确的结果,似乎它忽略了该值。

有人可以指出我的错误吗?

最佳答案

您重复覆盖coluna:

for(...)
{
    if(sscanf(...) == 1)
        coluna = atoi(col); // <--
}

我无法弄清楚你到底想要实现什么,如果你只想获得第一个这样的值(因此名称为“coluna”?),那么只需break 你的循环:

if(sscanf(...) == 1)
{
    coluna = atoi(col);
    break;
}

否则,请直接在此处使用 coluna,而不是破坏值或将值存储在数组中,如下所示。假设每个参数都可能包含 $n:

int cols[argc-1]; // assuming you checked for argc > 1 already!
int numCols = 0;

if(sscanf(...) == 1)
    cols[numCols++] = atoi(col);

旁注:这两段代码:

int total = argc-1;

for(i=0;i<total;i++) {
    if(i+1 == total) cmd[total+1] = NULL;
    else cmd[i] = argv[i+1];
}

可以通过简单地执行以下操作来替换:

--argc;
++argv;

除非您出于某种原因确实需要副本(例如将修改后的 cmd 与原始 argv 进行比较)。如果按上述方式修改 argc/argv,则可以像使用 cmd/total 一样使用 argc 和 argv。要保留名称,您甚至可以将 argc 重命名为 Total,将 argv 重命名为 cmd...

关于c - 将 $n 替换为字符串中的 n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43892011/

相关文章:

php - 如何在 PHP 中将数字分配到预定义的数字集中

c - sed 将//替换为/* */注释,除非//注释出现在/* */中

c - 传递函数指针 - 类型问题

c - 为什么 glibc 中 x86 的读写屏障不使用 __volatile asm?

android - 检测皮肤并捕捉图像

c - 这里无法理解getchar和putchar的作用

c - MPLAB 目标文件失败

ios - 我是否正确创建此 C 数组并将其传递给 Objective-C 方法并使用属性引用它?

c - 出现段错误 - 尝试从我的结构中检索数据

c - 哪个更快 : i=i+2 or i+=2?