我所拥有的:
char cmd[50] = "some text here";
char v[] = {'a','s','d','c','b'};
所以我想通过从v
中添加一个字母来连接cmd
。
显然:
strcat(cmd, v[3]);
不起作用是因为strcat
不接受参数v[n]
,其中n=int
。
我所拥有的:
char cmd[50] = "some text here";
char v[] = {'a','s','d','c','b'};
所以我想通过从v
中添加一个字母来连接cmd
。
显然:
strcat(cmd, v[3]);
不起作用是因为strcat
不接受参数v[n]
,其中n=int
。
嗯,就我理解的来看,您想从第二个数组中添加一个单个字符?那么您需要使用:
strncat (cmd, &v[3], 1);
:-)
你的做法有问题。
C语言字符串必须以0字节结尾,也就是'\0'
字符。使用""
自动添加该字符,否则必须手动添加,而且所有字符串函数都依赖于那个0的存在。
你的v数组包含的是字符,而不是字符串,而strcat
需要的是字符串。
一个解决方案:
char cmd[50] = "some text here";
char *v[] = {"a","s","d","c","b"};
strcat(cmd,v[3]);
cmd[]
包含足够的空间来保存您使用 strcat 添加的任何内容(这里是可以的)。通常最好使用 snprintf
来进行字符串连接,因为它将目标数组的总大小(包括终止空值)加起来,并且总是在那里添加空值,因此更难出错。以下是使用您原始的 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]);
[]
的数组buf
才能使用sizeof
。另外,使用同一缓冲区作为目标和格式参数可能会产生意外结果,因此我添加了一个新的目标缓冲区变量。snprintf
示例,仅使用您原始的两个数组,在当前cmd
内容的末尾添加:snprintf(cmd + strlen(cmd), (sizeof cmd) - strlen(cmd), "%c", v[3]);
显然,在这种情况下,其他答案中建议使用strncat(cmd,&v[3],1)
来添加一个字符的方式更好。但是,snprintf的好处在于,你可以添加所有由printf支持的数据类型,而不仅仅是字符。
int len=strlen(cmd); cmd[len] = v[3]; cmd[len+1] = 0;
。请注意,数组索引从0开始,因此some_cstring[strlen(some_cstring)]
始终为0。 - hyde不要使用这个:
strcat(cmd,&v[3]);
&v[3]
不是指向以空字符结尾的字符串的指针!请使用
strncat(cmd, &v[3], 1);
首先,确保变量“cmd”有足够的内存分配。
其次,“v[3]”是一个带符号字节的值。您必须使用以下调用strncat(而不是strcat):
strncat(cmd,&v[3],1);
怎么样?
strcat(cmd,&v[3]);
问题在于您没有正确使用strcat函数:
char *strcat (char *dest, const char *src);
因为你这样做
char *strcat (char *dest, char src);
所以你必须将一个char *声明为你的char。
char buf[2];
sprintf(buf,"%c", V[3]);
strcat(cmd, buf);
或者
strncat (cmd, &v[3],1);
你无法做到它。
strcat(cmd,&v[3]);
这将复制从单元格3到数组末尾的V数组,而不仅仅是复制V [3]
我可以提供另一种解决方案
int len = strlen(cmd);
cmd[len]=v[3];
cmd[len+1] = '\0';