如何将shell字符串传递给c程序



c noob的点,尤其是壳牌菜鸟,所以请对不起。我有一个分配,必须在其中读取shell脚本的字符串并将其输入使用STDIN的C程序。教授给我们提供了一个已经写的脚本,字符串以<<EOF并以EOF结尾。我不知道如何在程序中处理此字符串。感谢您的帮助。

C程序:

#include<stdio.h>
int main(int argc, char * argv[]){
  int i = 0, aCount = 0, eCount = 0, iCount = 0, oCount = 0, uCount = 0;
  while(argv[1][i] != EOF){
    if(argv[1][i] == 'A' || argv[1][i] == 'a'){
      aCount++;
    }
    if(argv[1][i] == 'E' || argv[1][i] == 'e'){
      eCount++;
    }
    if(argv[1][i] == 'I' || argv[1][i] == 'i'){
      iCount++;
    }
    if(argv[1][i] == 'O' || argv[1][i] == 'o'){
      oCount++;
    }
    if(argv[1][i] == 'U' || argv[1][i] == 'u'){
      uCount++;
    }
    i++;
  }
  printf("%s%dn", "Number of A's: ", aCount);
  printf("%s%dn", "Number of E's: ", eCount);
  printf("%s%dn", "Number of I's: ", iCount);
  printf("%s%dn", "Number of O's: ", oCount);
  printf("%s%dn", "Number of U's: ", uCount);
  return 0;
}

脚本:

run () {
  echo "$*"
  if $*
  then echo 'success'
  else echo 'error'
  fi
}
run ./count_vowels <<EOF
Adieu, Bo!
EOF

<<EOF是一种示例符号,含义为"读取脚本的以下行,直到看到 EOF并将它们作为其标准输入为程序。"

对于该程序,这将在stdin中以常规流的形式出现。您可以使用通常的功能(包括getcharscanf等)阅读,直到达到文件结束(真正的流程)为止,这时功能将表明他们无法以各种方式进行进一步阅读。(在很大程度上,通过返回EOF,但是请注意,如果在达到通话之前,一个呼叫中发生部分匹配,则scanf可能会返回其他值,例如返回0或1表示指示为0或1个项目,尽管请求2分配了2个项目。)

这称为此处的文档。有关变化和点缀,请参见您的外壳文档。特定的字符串" EOF"是根据您的指示选择的;一个人可以使用外壳接受的其他东西,例如:

ProgramName Arguments <<EndOfMyInput
MyLine1
MyLine2
MyLine3
EndOfMyInput

最新更新