如何从c中的字符串中删除前n个字符?

时间:2014-10-21 22:05:16

标签: c pointers c-strings

我有一个函数drop_left(),它从字符串中删除前n个字符。我将指针增加n个空格,使字符串指向前n个字符后的所有内容。当我返回main时,该函数实际上并没有改变字符串。我做错了什么?

int main(int argc, char** argv) {
    char string[]="drop left";
    drop_left(string, 2);
    printf("Drop left: %s\n" , string);
}

void drop_left(char *s, int n){
        s+=n;
}   

2 个答案:

答案 0 :(得分:3)

因为您正在修改函数内部的s,这对指向函数字符串OUTSIDE的指针没有任何影响。您需要return s在函数内部,然后string = drop_left(string, 2)

请注意,这样做会导致内存泄漏。你的代码只是导致C忘记"关于丢弃的角色,但是如果你对你的malloc()空间的字符串做同样的事情,他们仍然会耗尽内存并造成麻烦。

答案 1 :(得分:1)

当您在s中更改drop_left时,您正在更改本地变量。它不会改变原始字符串在调用函数中指向的位置。

处理它的一种方法是更改​​字符串的内容,以便查看调用函数的更改。你可以使用类似的东西:

void drop_left(char *s, int n)
{
   char* s2 = s + n;
   while ( *s2 )
   {
      *s = *s2;
      ++s;
      ++s2;
   }
   *s = '\0';
}