如何连接子字符串以生成更大的字符串

how do I concatenate sub strings to make a bigger string

具体来说,我正在尝试构建以下语句并将其 运行 作为以下命令:

system("java -cp . mainpackage.SomeClass 1234567890 98765");

我在网上查了一下,但是例子没有编译通过,所以我拼凑了下面的说明性伪代码。 如何更改下面的代码以使其连接字符串并执行命令?

#include <stdio.h>

main() {
    char jv[33];
    strcpy(jv, "java -cp . mainpackage.SomeClass ");
    char to[10];
    strcpy(to, "1234567890 ");
    char pin[5];
    strcpy(pin, "98765");
    system(jv + to + pin);
}  

topin 是发送到 java 程序的参数。最终,topin 将来自输入,但现在我只想在测试代码的其他部分时将它们视为这些值。

来自实际的命令行,例如 int main (int argc, char **argv)

char buf[1024] = {0};
int n;
for (n = 0; n < argc; n ++)
  strcat (buf, argv[n]); // Change to strlcat if you have it available (BSD or Mac)
printf ("result = %s\n", buf);

或使用您的示例:

char jv[33];
strcpy(jv, "java -cp . mainpackage.SomeClass ");
char to[10];
strcpy(to, "1234567890 ");
char pin[5];
strcpy(pin, "98765");
system(jv + to + pin);


char result[1024] = {0}; // C does not zero format variables inside a function, so we do it ourselves with = {0}
sprintf (result, "%s %s %s", jv, to, pin); // Should use snprintf instead if available
printf ("result = %s\n", result); 

char result[1024] =  {0};
strcat (result, jv);
strcat (result, " ");
strcat (result, to);
strcat (result, " ");
strcat (result, pin); // Should use strlcat instead if available
printf ("result = %s\n", result); 

首先,让我告诉你上面代码中的错误。

char jv[33];
strcpy(jv, "java -cp . mainpackage.SomeClass ");

C 中,字符串以 null 结尾,因此每个字符串需要一个额外的元素来存储 null。扩展数组的大小。

The, for concatenation like

system(jv + to + pin);

您可以定义一个足够大 的数组来保存串联的最终值,并使用strcat() 来串联源字符串和目标字符串。您可以根据需要使用循环附加多个子字符串以构成完整的命令字符串。

snprintf() 是一种灵活且安全的方法。 @fukanchik。 C 中的主要挑战是:
1) 管理字符串内存 space 和
2) 防止溢出。

const char *jv = "java -cp . mainpackage.SomeClass ";
const char *to = "1234567890 ";
const char *pin = "98765";

#define BIGBUF 100
char command[BIGBUF];
snprintf(command, sizeof command, "%s%s%s", jv, to, pin);
system(command);

或者使用 C99 并假设为整数

const char *jv = "java -cp . mainpackage.SomeClass";
long to = 1234567890;
long pin = 98765;
int n = snprintf(NULL, 0, "%s %ld %ld", jv, to, pin);
char command[n+1];
snprintf(command, sizeof command, "%s %ld %ld", jv, to, pin);
system(command);