Так что я делаю прошлый бумажный вопрос о функциях/символах/указателях. Я столкнулся с проблемой в своем коде и нуждаюсь в помощи в понимании этого.Удаление символа из строки в C
В частности, у меня возникают проблемы с вопросом B) ii), который требует от меня удаления двоеточия из строки.
Моя идея состояла в том, чтобы взять строку, сделать указатель и указать прямо на двоеточие, а затем заменить этот двоеточие на следующий символ, который его продолжит. Затем замените остальные символы после двоеточия символом перед ним, пока он не достигнет NULL.
Когда дело доходит до компиляции, оно компилируется просто отлично, но дает мне ошибку сегментации: 11. Что происходит? Как я могу это исправить? Я что-то не понимаю? Благодарю.
#include <stdio.h>
#include <stdlib.h>
int locate_colon(char* x) //Question B) i)
{
int i = 0;
while(*x != '\0')
{
if(*x == ':')
{
return i;
}
i++;
x++;
}
return -1;
}
char* remove_colon(char* x) //Question B) ii)
{
int y,i,j;
y = locate_colon(x);
i =0;
j =1;
while(*x != '\0')
{
x[y+i] = x[y+j];
i++;
j++;
}
return x;
}
int main() //Testing if functions work by running through compiler
{
int x;
char colon[] = "Colon: 123";
char* colonptr;
colonptr = colon;
x = locate_colon(colonptr);
printf("%d",x);
//B) ii)
char* y;
y = remove_colon(colonptr);
while(y != '\0')
{
printf("%s",y);
y++;
}
return 0;
}
Вы уверены, что хотите сбросить 'i' и' j' на '0' и' 1' соответственно для каждой итерации в 'remove_colon'? – Downvoter
, если ваша функция 'remove_colon()' когда-либо возвращается, обязательно будет иметь место, что возвращаемое значение ('x') указывает на пустую строку, потому что это единственный способ выхода цикла. –
@Downvoter ok Я исправил код, но все же придумал ошибку сегментации. – emuterisa