C 在添加字符数组之前对其进行移位
我想在C中的字符数组中间插入字符,但首先我想在每次添加字符之前将其向右移动,这样我就不会因为覆盖而丢失字符数组中已经存在的内容(称为输入)。我假设您使用空字符终止数组,因为您使用的是strlen。在这种情况下,我很确定for循环的第一次迭代将用前面的字符覆盖空字符,而您似乎不会替换它。试着跑步C 在添加字符数组之前对其进行移位,c,arrays,insert,char,shift,C,Arrays,Insert,Char,Shift,我想在C中的字符数组中间插入字符,但首先我想在每次添加字符之前将其向右移动,这样我就不会因为覆盖而丢失字符数组中已经存在的内容(称为输入)。我假设您使用空字符终止数组,因为您使用的是strlen。在这种情况下,我很确定for循环的第一次迭代将用前面的字符覆盖空字符,而您似乎不会替换它。试着跑步 for( k = strlen(input) + 1; k > place42; k--)... 这将替换空字符,以便正确终止数组。当然,您还应该确保没有溢出数组并在不属于您的内存上写入数
for( k = strlen(input) + 1; k > place42; k--)...
这将替换空字符,以便正确终止数组。当然,您还应该确保没有溢出数组并在不属于您的内存上写入数据。为什么不使用标准的C字符串函数编写通用插入例程?大概是这样的:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// insert "ins" into "src" at location "at"
char *insert(char *src, char *ins, int at) {
char dst[strlen(src) + strlen(ins) + 1];
strncpy(dst, src, at);
strcpy(dst + at, ins);
strcpy(dst + at + strlen(ins), src + at);
return strdup(dst);
//return strcpy(src, dst); // you could return this if you know src is long enough
}
int main(void) {
char *src = "abcdef";
char *ins = "123";
printf("%s\n", insert(src, ins, 3));
return 0;
}
abc123def