Im trying to remove the first char of the string and keep the remainder, my current code doesnt compile and im confused on how to fix it.
My code:
char * newStr (char * charBuffer)
{
int len = strlen(charBuffer);
int i = 1;
char v;
if(charBuffer[0] == 'A' || charBuffer[0] == 'Q'){
for(i=1;i<len;i++)
v = v + charBuffer[i];
}
v = v + '\0';
return v;
}
Gcc: "Warning: return makes pointer from integer without a cast"
Also: "char * newStr (char * charBuffer)" needs to remain the same.
Your function is declared to return a char * and you are returning a char.
Furthermore, why don't you just return a pointer to the second character?
You can simply move your char pointer one character in:
Well, your description says you want to deal with "strings", but you code deals with char buffers/pointers. The simplest approach to remove the first character for strings would be
but as that doesn't look at all like what your code is doing, you probabaly want something different. For example, if you want to just remove a leading 'A' or 'Q' and then copy the string to a buffer, you want something like
Several of the other answers recommended returning
charBuffer + 1
. As I noted in my previous comment:Freeing a piece of storage from the middle will result in undefined behavior.
Instead, try the
strdup
function which will return a duplicate of the given string.Strings don't work like this in C. You're summing up all of the characters in the buffer into the
v
variable. You can't use + to concatenate. The code you posted has some serious problems which indicate that there's an understanding gap with how to use C.Try this:
or this:
Depending on whether you want to allocate a new string or not. You'll also have to add the code for handling the cases that don't start with 'Q' or 'A'. I didn't include those because I'm not sure exactly what you're trying to do here.
Make sure you do some research into allocating and deallocating memory with malloc and free. These are fundamental functions to be able to use if you're going to be doing C programming.