gpt4 book ai didi

linux - 如何将 bash 脚本中的字符串发送到 c 程序并使用该字符串

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

我需要使用 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 程序打印到标准输出的内容放入您的“长度”变量中,这根本不是一回事。

如果程序正确执行,退出代码通常为 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。这不会计算空格,因此您不会知道单词之间是否有多个空格。

关于linux - 如何将 bash 脚本中的字符串发送到 c 程序并使用该字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40064582/

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