11

我有的:

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

所以我想cmd通过添加一个来自v.

明显地:

strcat(cmd, v[3]);

不起作用,因为strcat不接受v[n]参数n = int

4

7 回答 7

12

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

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

:-)

于 2012-11-05T09:26:31.603 回答
9

你的方法有问题。

  • C 字符串必须以 0 字节结尾,即'\0'字符。Using""会自动添加它,否则您必须自己添加它,并且所有字符串函数都依赖于 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真的是一个数组时才有效,[]在这里用 like 声明。同样对于 snprintf,使用相同的缓冲区作为目标和格式参数可能会产生意想不到的结果,所以我添加了一个新的目标缓冲区变量。

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

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

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

于 2012-11-05T09:26:14.057 回答
5

不要使用这个:

strcat(cmd,&v[3]);

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

strncat(cmd, &v[3], 1);
于 2012-11-05T09:28:48.387 回答
2

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

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

strncat(cmd,&v[3],1);
于 2012-11-05T09:23:56.107 回答
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';
于 2012-11-05T09:29:19.997 回答
1

怎么样

strcat(cmd,&v[3]);
于 2012-11-05T09:22:43.850 回答
1

问题是您也不使用 strcat :

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

因为你这样做

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

所以你必须声明一个 char * 作为你的 char。

于 2012-11-05T09:28:23.650 回答