【问题标题】:Why isn't my input redirection working?为什么我的输入重定向不起作用?
【发布时间】:2015-12-07 04:46:40
【问题描述】:

这是我要运行的代码

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


int overFlow(char* value){
  char string[8];
  strcpy(string, value);
  return 0;
}

int main(int argc, char** argv){
  char string[10];
  strcpy(string, argv[1]);
  overFlow(string);
  return 0;
}

使用包含此内容的简单文本文件

hello

但是当我执行“./program

任何帮助都会很棒。谢谢。

【问题讨论】:

  • 您的“命令外壳”正在将 STDIN 从终端更改为“文本文件”的内容。您的程序应该询问“argc”以确定是否存在参数...“./program
  • 你到底想在这里做什么?您想通过输入重定向读取文件吗?或者你想从一个文件中读取它,作为你程序的参数。顺便说一句,您的代码在编写方式和使用方式方面存在冲突。

标签: c linux input


【解决方案1】:

当您使用以下命令执行程序时:

./program < textfile

您没有将任何参数传递给程序。所以 arg 计数是 1,这个数组:argv 只是有程序名

这一行失败了:

strcpy(string, argv[1]);

【讨论】:

    【解决方案2】:

    关于实际原因,其他答案是正确的。你可以用来调用程序的命令是这样的:

    cat textfile | ./myprogram
    

    这首先是 cat 命令打印出 textfile 的内容和 |运算符将一个命令的输出放入下一个命令的输入。所以它然后运行

    ./myprogram hello
    

    您可能还想增加缓冲区并查看 strncpy 以防止溢出。

    【讨论】:

      猜你喜欢
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      相关资源
      最近更新 更多