How would I remove the first three letters of a string with C?
Asked
Active
Viewed 4.9k times
23
-
4"plz send teh codez!!1" - "No." – Jan 21 '11 at 17:21
-
8`str = str + 3;` since `str+=3;` is too short for a comment! – David Heffernan Jan 21 '11 at 17:23
5 Answers
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
-
1Not only is `sizeof(char)` **useless**, it's also **wrong** for other types. Pointer arithmetic takes place in units of elements, not bytes. – R.. GitHub STOP HELPING ICE Jan 21 '11 at 18:25
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
-
1That'll copy the first three characters of the string. The question asks how to *remove* the first three characters. – mipadi Jan 21 '11 at 17:30
-
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