繁体   English   中英

如何在bash脚本中将字符串发送到ac程序并使用该字符串

[英]How to send a string in bash script to a c program and use that string

我需要使用bash脚本将字符串发送到C程序,然后将该字符串放入C程序并对其进行处理。 问题是我不知道如何使用字符串。 我尝试使用printf来查看c程序实际上得到了什么,并打印出了随机数。

这是bash脚本:

length=`/home/hellboy632789/linelength $line`;

这是C程序:

int main(int argc, char *argv[])

{

    int length;
    char *string = argv[1];
    for(length = 0; string[length] != '\0'; length++);
    printf("%d\n", length);
    return(0);
}

我对C相当陌生,但是任何帮助将不胜感激。

您将返回字符串的长度作为C程序的退出代码。 Bash使退出代码在变量$?可用$?

另一方面,您的bash脚本会将C程序要打印到stdout的内容放入“ length”变量中,这根本不是同一回事。

由于通常在程序正确执行的情况下退出代码为0,在出现错误的情况下退出代码为非零,因此按原样使用bash脚本并更改C代码更有意义。

替换return(length); printf("%d\\n", length);return(0); 并且您的程序应该可以按照您的意愿工作。 您可以通过在bash命令提示符处运行/home/hellboy632789/linelength testtestwhatever进行任何测试。

当然还有许多其他方法,但是我想这只是迈向更复杂事物的第一步。 祝你好运和恒心。

编辑:例如,这有效:

~/316643$ cat linelength.c
#include <stdio.h>

int main(int argc, char *argv[])
{
    int length;
    char *string = argv[1];
    for(length = 0; string[length] != '\0'; length++);
    printf("%d\n", length);
    return(0);
}
~/316643$ gcc -o linelength linelength.c
~/316643$ ./linelength qwertyui
8
~/316643$ line="qwerty uiop"
~/316643$ length=`./linelength "$line"`
~/316643$ echo "length is $length bytes"
length is 8 bytes
~/316643$ 

编辑2:Bash会在空格处分割所有遵循命令行linelength的内容,除非您使用反斜杠保护空格或将字符串括在引号中。 对于带空格的参数,有两种选择,要么像这样保护空格:

~/316643$ line="qwerty  uiop"
~/316643$ ./linelength "$line"
length is 12 bytes
~/316643$ 

请注意,这将计算空格。

否则,您将修改C程序以计算所有argv [i],其中i从1到argc-1。 那不会计算空格,因此您将不知道单词之间是否有多个空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM