I want to replace a character by two characters in my string.
void strqclean(const char *buffer)
{
char *p = strchr(buffer,'?');
if (p != NULL)
*p = '\n';
}
int main(){
char **quest;
quest = malloc(10 * (sizeof(char*)));
quest[0] = strdup("Hello ?");
strqclean(quest[0]);
printf(quest[0]);
return;
}
This works fine, but in fact I want to replace my "?" by "?\n". strcat doesn't works with pointers is that right ? I can find a solution adding a character in my string and replace it by '\n', but that's not what I really want.
Thanks !
EDIT
In your initial answer you mentioned that you wanted to append a newline after
the ?
, but now this reference is gone.
My first answer addressed this, but since it's gone, I'm not sure what you really want.
NEW ANSWER
You have to change your strqclean
function
// remove the const from the parameter
void strqclean(char *buffer)
{
char *p = strchr(buffer,'?');
if (p != NULL)
*p = '\n';
}
OLD ANSWER
strcat
works with pointers, but strcat
expects C-string and expects that the
destination buffer has enough memory.
strcat
allows you to connate strings. You can use than to append the \n
if
the ?
character is always at the end of the string. If the character that
you want to replace is in the middle, the you have to insert the character in
the middle. For that you can use use memmove
that allows you to move chunks
for memory when the destination and source overlap.
#include <stdio.h>
#include <string.h>
int main(void)
{
char line[1024] = "Is this the real life?Is this just fantasy";
char *pos = strchr(line, '?');
if(pos)
{
puts(pos);
int len = strlen(pos);
memmove(pos + 2, pos + 1, len);
pos[1] = '\n';
}
puts(line);
return 0;
}