C char数组连接

时间:2012-11-05 09:21:20

标签: c arrays char concatenation

我有什么:

char cmd[50] = "some text here";
char v[] = {'a','s','d','c','b'};

所以我想通过添加cmd中的一封信来连接v

显然:

strcat(cmd, v[3]);

无效,因为strcat不接受v[n]参数n = int

7 个答案:

答案 0 :(得分:12)

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

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

: - )

答案 1 :(得分:9)

您的方法存在问题。

  • 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数组的示例:

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]);

注意:像这样的sizeof只有当buf确实是一个数组时才有效,并在[]这里声明。同样使用snprintf,使用相同的缓冲区作为目标和格式参数可能会产生意外的结果,所以我添加了一个新的目标缓冲区变量。

另一个snprintf示例,仅包含原始的两个数组,附加到cmd的当前内容的末尾:

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

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

答案 2 :(得分:5)

使用此功能:

strcat(cmd,&v[3]);

&v[3]不是指向空终止字符串的指针!改为使用

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

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:1)

怎么样

strcat(cmd,&v[3]);

答案 5 :(得分:1)

问题是你也不使用strcat:

char *strcat (char *dest, const char *src);

因为你做了

char *strcat (char *dest, char src);

所以你必须将char *声明为你的char。

答案 6 :(得分:1)

char buf[2];

sprintf(buf,"%c", V[3]);
strcat(cmd, buf);

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';