Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C系统函数连接字符串?_C - Fatal编程技术网

C系统函数连接字符串?

C系统函数连接字符串?,c,C,我来自爪哇,我无法理解这一点。我正在尝试使用系统函数连接字符串以运行带有参数的命令,这是我正在做的,但它不起作用: system("command "+param1+" other stuff "+param3); 用C语言连接字符串 在C语言中,字符串表示为字符数组。它们的名称是指向第一个元素的指针。每个操作都应该使用函数来完成。在另一种情况下,您只需进行指针运算。所以,在您的示例中,您尝试从系统中可能根本不存在的地址启动函数 不要使用strcat!如果您确实需要简单的函数来调用use,这是

我来自爪哇,我无法理解这一点。我正在尝试使用系统函数连接字符串以运行带有参数的命令,这是我正在做的,但它不起作用:

system("command "+param1+" other stuff "+param3);

用C语言连接字符串

在C语言中,字符串表示为字符数组。它们的名称是指向第一个元素的指针。每个操作都应该使用函数来完成。在另一种情况下,您只需进行指针运算。所以,在您的示例中,您尝试从系统中可能根本不存在的地址启动函数

不要使用strcat
!如果您确实需要简单的函数来调用use,这是很危险的


有关所需的详细信息

c
中没有运算符重载。您必须创建足够的缓冲区,然后使用库函数
strcat

可能您希望使用类似
snprintf
的函数来构建命令字符串:您可以在字符串中插入各种类型(不仅仅是字符串),并且可以防止缓冲区溢出(检查其返回值!)


strcat
会导致缓冲区溢出,我认为在这种情况下最好使用
snprintf
。不!不不
strcat
<代码>strcat
分配缓冲区溢出,就像太阳分配阳光一样。。。说真的,不要。只要正确地调整缓冲区的大小,strcat就可以了。@JamesMcLaughlin:问题是,如果您必须附加多个字符串,那么它很快就会变得不重要,并且容易出错。最好使用一个像
snprintf
这样的函数来代表您进行计算。@JamesMcLaughlin:再说一次,当您只需要发生一个字符串时,它会变成一团
strlen
,当您开始连接更多内容时,会出现一个错误(另外,它的效率很低,因为每个
strcat
strlen
每次都遍历所有字符串);如上所述,把这团乱麻留给
snprintf
。为什么会投反对票?这是一个非常合理的问题。@JamesMcLaughlin,因为任何合理的初级C教程都指出,在C中串接字符串并不是那么容易,它是使用stdlib函数完成的。你能给我一个例子吗?好的,只是想知道%s是什么时候参数将进入命令?阅读可能的格式。不知道为什么不将其链接到其他字符串functions@user2484067:是的,这是字符串参数的占位符;如果您想插入整数,您可以使用
%d
,对于浮点类型
%f
等,您可以在.
char buffer[256];
if(snprintf(buffer, sizeof(buffer), "command %s other stuff %s", param1, param3)>=sizeof(buffer))
{
   /* the buffer isn't big enough */
}
else
    system(buffer);