Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在添加字符数组之前对其进行移位_C_Arrays_Insert_Char_Shift - Fatal编程技术网

C 在添加字符数组之前对其进行移位

C 在添加字符数组之前对其进行移位,c,arrays,insert,char,shift,C,Arrays,Insert,Char,Shift,我想在C中的字符数组中间插入字符,但首先我想在每次添加字符之前将其向右移动,这样我就不会因为覆盖而丢失字符数组中已经存在的内容(称为输入)。我假设您使用空字符终止数组,因为您使用的是strlen。在这种情况下,我很确定for循环的第一次迭代将用前面的字符覆盖空字符,而您似乎不会替换它。试着跑步 for( k = strlen(input) + 1; k > place42; k--)... 这将替换空字符,以便正确终止数组。当然,您还应该确保没有溢出数组并在不属于您的内存上写入数

我想在C中的字符数组中间插入字符,但首先我想在每次添加字符之前将其向右移动,这样我就不会因为覆盖而丢失字符数组中已经存在的内容(称为输入)。

我假设您使用空字符终止数组,因为您使用的是strlen。在这种情况下,我很确定for循环的第一次迭代将用前面的字符覆盖空字符,而您似乎不会替换它。试着跑步

    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