C字符数组连接

C字符数组连接,c,arrays,char,concatenation,C,Arrays,Char,Concatenation,我所拥有的: char cmd[50] = "some text here"; char v[] = {'a','s','d','c','b'}; 所以我想通过添加一个来自v的字母来连接cmd 显然: strcat(cmd, v[3]); 不工作,因为strcat不接受v[n]参数n=int如何 strcat(cmd,&v[3]); 首先,确保变量'cmd'分配了足够的内存 其次,“v[3]”是一个有符号字节的值。您必须使用以下对strncat(非strcat)的调用: 你的方法有

我所拥有的:

char cmd[50] = "some text here";
char v[] = {'a','s','d','c','b'};
所以我想通过添加一个来自
v
的字母来连接
cmd

显然:

strcat(cmd, v[3]);
不工作,因为strcat不接受
v[n]
参数
n=int

如何

strcat(cmd,&v[3]);

首先,确保变量'cmd'分配了足够的内存

其次,“v[3]”是一个有符号字节的值。您必须使用以下对strncat(非strcat)的调用:


你的方法有问题

  • C字符串必须以0字节结尾,也就是说
    '\0'
    字符。使用
    会自动添加它,否则您必须自己添加它,并且所有字符串函数都依赖于0的存在

  • v数组包含字符,而不是字符串,
    strcat
    接受字符串

一个解决方案:

char cmd[50] = "some text here";
char *v[] = {"a","s","d","c","b"};
strcat(cmd,v[3]);
这会将char数组转换为指向C字符串的指针数组

另外,您有责任确保,
cmd[]
包含足够的空间来容纳您使用strcat添加到其中的任何内容(在这里)。通常最好使用
snprintf
来进行字符串连接,因为它需要目标数组的总大小,包括终止null,并且总是在那个里添加null,所以很难搞乱。原始字符数组的示例:

char cmd[50] = "some text here";
char buf[50];
char v[] = {'a','s','d','c','b'};
snprintf(buf, sizeof buf, "%s%c", cmd, v[3]);
注意:只有当
buf
实际上是一个数组时,像这样的sizeof才起作用,在这里用
[]
声明。同样对于snprintf,使用相同的缓冲区作为目标和格式参数可能会产生意外的结果,所以我添加了一个新的目标缓冲区变量

还有一个snprintf示例,仅使用原始的两个数组,附加到cmd当前内容的末尾:

snprintf(cmd + strlen(cmd), (sizeof cmd) - strlen(cmd), "%c", v[3]);

很明显,在这个特殊的例子中,其他答案中建议添加1个字符的
strncat(cmd,&v[3],1)
要好得多,但是snprintf的好处是,您可以添加printf支持的所有数据类型,而不是chars。

嗯。据我所知,您想从第二个数组中添加一个字符吗? 所以你必须使用

  strncat (cmd, &v[3], 1);

:-)

问题是您也没有使用strcat:

char *strcat (char *dest, const char *src);
因为你知道

char *strcat (char *dest, char src);
因此,您必须声明一个char*作为您的char。

请勿使用此选项:

strcat(cmd,&v[3]);
&v[3]
不是指向以null结尾的字符串的指针!改用

strncat(cmd, &v[3], 1);

你不能用它

strcat(cmd,&v[3]);
这将把V数组从单元格3复制到数组的末尾,而不是只复制V[3]

我可以提出另一个解决办法

int len = strlen(cmd);
cmd[len]=v[3];
cmd[len+1] = '\0';

这将添加多个字符,并且它将超出要从中复制的数组的末尾,因为没有空终止。谢谢!如果我能注意到cmd[]包含足够的空间,您认为哪种方法最快?strncat可能是其中最快的,但最快的是
int len=strlen(cmd);cmd[len]=v[3];cmd[len+1]=0。请注意数组索引是如何从0开始的,因此
some_cstring[strlen(some_cstring)]
始终为0。意外的深入回答-感谢提供值!我选择了另一种方法,但这也很有效,因为它非常简单。谢谢:)
strncat (cmd, &v[3],1);
strcat(cmd,&v[3]);
int len = strlen(cmd);
cmd[len]=v[3];
cmd[len+1] = '\0';