23

How would I remove the first three letters of a string with C?

Trevor Hickey
  • 36,288
  • 32
  • 162
  • 271

5 Answers5

35

Add 3 to the pointer:

char *foo = "abcdef";
foo += 3;
printf("%s", foo);

will print "def"

BlackBear
  • 22,411
  • 10
  • 48
  • 86
18
void chopN(char *str, size_t n)
{
    assert(n != 0 && str != 0);
    size_t len = strlen(str);
    if (n > len)
        return;  // Or: n = len;
    memmove(str, str+n, len - n + 1);
}

An alternative design:

size_t chopN(char *str, size_t n)
{
    assert(n != 0 && str != 0);
    size_t len = strlen(str);
    if (n > len)
        n = len;
    memmove(str, str+n, len - n + 1);
    return(len - n);
}
Jonathan Leffler
  • 730,956
  • 141
  • 904
  • 1,278
  • +1, but wouldn't it be better as int, which prints the # of chars actually remaining (or -1 instead of the assertion) ? – Tim Post Jan 21 '11 at 18:35
  • @Tim: there are all sorts of possible designs; this is a roughly minimal implementation - on the whole, I think the assignment is better than the early return. As to the return value - I'd be fine with returning the reduced length - that would be `size_t` like the input, most likely. – Jonathan Leffler Jan 21 '11 at 19:09
11

For example, if you have

char a[] = "123456";

the simplest way to remove the first 3 characters will be:

char *b = a + 3;  // the same as to write `char *b = &a[3]`

b will contain "456"

But in general case you should also make sure that string length not exceeded

Martin Babacaev
  • 6,240
  • 2
  • 19
  • 34
0

In C, string is an array of characters in continuous locations. We can't either increase or decrease the size of the array. But make a new char array of size of original size minus 3 and copy characters into new array.

Mahesh
  • 34,573
  • 20
  • 89
  • 115
0

Well, learn about string copy (http://en.wikipedia.org/wiki/Strcpy), indexing into a string (http://pw1.netcom.com/~tjensen/ptr/pointers.htm) and try again. In pseudocode:

find the pointer into the string where you want to start copying from
copy from that point to end of string into a new string.
I82Much
  • 26,901
  • 13
  • 88
  • 119
  • 2
    -1. Code without explanation is better than links to references and completely obvious "pseudocode". – darda Jan 30 '14 at 18:21