Использование Xcode.Как усечь в C
Как удалить первое число символов x в строке, где x - конечное значение?
Например, если у меня есть строка:
s = 123.456.789
Как удалить первые 4 символа, чтобы сделать:
s = 456.789
Помощь.
Использование Xcode.Как усечь в C
Как удалить первое число символов x в строке, где x - конечное значение?
Например, если у меня есть строка:
s = 123.456.789
Как удалить первые 4 символа, чтобы сделать:
s = 456.789
Помощь.
char *s = "123.456.789"
s += 4;
printf("%s\n", s); // will print 456.789
char *tmp=strdup(oldstr);
strcpy(oldstr, &tmp[4]); // copy from character # 5 back into old string
free(tmp);
Попробуйте это.
void remove_first_x(char *s, int x) {
char *p = s+x;
memmove(s, p, strlen(p)+1);
}
int main() {
char *str1 = "123.456.789"; // String defined this way should not be modified.
// C++ compiler warns you if you define a string
// like this! Better define it as "const char *".
char str2[] = "123.456.789"; // String defined this way can be modified
remove_first_x(str1, 4); // Not safe!
remove_first_x(str2, 4); // Safe!
return 0;
}
В большинстве реализаций это будет segfault, если оно применяется к автоматической строке (то есть, которая появляется внутри '' 's в коде. – dmckee
@dmckee, я согласен с вами. Но когда вы объявляете такую строку, ее следует объявить как «const char *». Эта функция принимает «char *», и вы можете безопасно отправлять строки, которые могут быть изменены. Я буду обновлять свой пример, чтобы это отразить. – Harmeet
Применяемый без мысли, что этот подход устанавливает ловушку для неосторожного, когда они начинают использовать динамически выделенную память; нет ничего плохого в этом, как показано здесь, но следите за тем, чтобы потерять ваш 'free'able дескриптор, если строка находится в памяти' malloc'. – dmckee