red*_*iun 11 c arrays concatenation char
是)我有的:
char cmd[50] = "some text here";
char v[] = {'a','s','d','c','b'};
Run Code Online (Sandbox Code Playgroud)
所以我想cmd通过添加一个来自的连接来连接v.
明显:
strcat(cmd, v[3]);
Run Code Online (Sandbox Code Playgroud)
不起作用,因为strcat不接受v[n]参数n = int.
MGr*_*ant 12
嗯.据我所知,你想从第二个数组中添加一个char?所以你必须使用
strncat (cmd, &v[3], 1);
Run Code Online (Sandbox Code Playgroud)
:-)
您的方法存在问题.
C字符串必须以0字节结尾,换句话说'\0'字符.使用""自动添加,但是你必须自己添加它,并且所有字符串函数都依赖于那里的0.
你的v数组包含字符,而不是字符串,并strcat采用字符串.
一个解决方案
char cmd[50] = "some text here";
char *v[] = {"a","s","d","c","b"};
strcat(cmd,v[3]);
Run Code Online (Sandbox Code Playgroud)
这会将您的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]);
Run Code Online (Sandbox Code Playgroud)
注意:像这样的sizeof只有在buf真正是一个数组的情况下才能工作,并[]在这里声明.同样使用snprintf,使用相同的缓冲区作为目标和格式参数可能会产生意外的结果,所以我添加了一个新的目标缓冲区变量.
还有一个snprintf示例,仅包含原始的两个数组,附加到cmd的当前内容的末尾:
snprintf(cmd + strlen(cmd), (sizeof cmd) - strlen(cmd), "%c", v[3]);
Run Code Online (Sandbox Code Playgroud)
很明显,在这种特殊情况下,strncat(cmd, &v[3], 1)在其他答案中建议添加1个字符要好得多,但是snprintf的好处是,你可以添加printf支持的所有数据类型,而不是字符.
千万不能使用此:
strcat(cmd,&v[3]);
Run Code Online (Sandbox Code Playgroud)
&v[3]不是指向空终止字符串的指针!改为使用
strncat(cmd, &v[3], 1);
Run Code Online (Sandbox Code Playgroud)