我需要使用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很新,但是非常感谢任何帮助。
答案 0 :(得分:1)
您将返回字符串的长度作为C程序的退出代码。 Bash使变量$?
中的退出代码可用。
另一方面,你的bash脚本正在将你的C程序打印到stdout的“长度”变量放入,这完全不同。
由于如果程序正确执行,退出代码通常为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。这不会计算空格,因此您不会知道单词之间是否有多个空格。