从字符串C中的给定位置删除给定数量的字符

时间:2015-01-21 21:06:05

标签: c string

我正在尝试从字符串中删除给定数量的字符,并且必须从某个位置删除它。例如。我有一个字符串" helloStackOverFlow"和给定的数字:位置i = 5,要删除的字符数n = 9。所以我们得到了#34; helloFlow"。

当我执行程序时,出现错误Unhandled exception at 0x00EC166F in skuska trening.exe: 0xC0000005: Access violation writing location 0x00EC58D7.

这是我的代码,我认为字符串分配有问题,它想写一些不存在的地方,但我不确定......

 void remove(char s[], int n, int i){

    int j,dlzka=0;
    dlzka = strlen(s);

    for(j=i; j<dlzka; j++){
        do{
        s[j] = s[j+n];
        }while( (j+n)==dlzka);
    }
    printf("%s\n", s);

}

int main()
{
    char s[100];
    int n, i;

    remove("helloStackOverFlow", 9, 5);

    system("pause");
  return 0;
}

1 个答案:

答案 0 :(得分:0)

您的代码中有几处错误

  1. 您正在尝试更改

    中的字符串文字
    remove("helloStackOverFlow", 9, 5);
    
  2. 您的函数名称与标准函数的名称相同。

  3. 您的remove()函数算法错误,while循环永远不会结束,因为jn在循环内都没有变化。

  4. 此代码应该可以使用

    void removeChunk(char s[], unsigned int n, unsigned int i)
    {
        unsigned int k;
        unsigned int length;
    
        if ((s == NULL) || (i == 0))
            return;
        length = strlen(s);
        if (i + n > length)
            n = length - i;
        for (k = 0 ; (k < n) && (s[k + i - 1] != '\0') ; k++)
            s[k + i] = s[k + i + n];
    }
    
    int main()
    {
        char s[100] = "helloStackOverFlow";
    
        removeChunk(s, 9, 5);
    
        printf("%s\n", s);
        return 0;
    }