2013-11-17 3 views
-1

Использование Xcode.Как усечь в C

Как удалить первое число символов x в строке, где x - конечное значение?

Например, если у меня есть строка:

s = 123.456.789 

Как удалить первые 4 символа, чтобы сделать:

s = 456.789 

Помощь.

ответ

1
char *s = "123.456.789" 
s += 4; 
printf("%s\n", s); // will print 456.789 
+1

Применяемый без мысли, что этот подход устанавливает ловушку для неосторожного, когда они начинают использовать динамически выделенную память; нет ничего плохого в этом, как показано здесь, но следите за тем, чтобы потерять ваш 'free'able дескриптор, если строка находится в памяти' malloc'. – dmckee

2
char *tmp=strdup(oldstr); 
strcpy(oldstr, &tmp[4]); // copy from character # 5 back into old string 
free(tmp); 

Попробуйте это.

0
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; 
} 
+0

В большинстве реализаций это будет segfault, если оно применяется к автоматической строке (то есть, которая появляется внутри '' 's в коде. – dmckee

+0

@dmckee, я согласен с вами. Но когда вы объявляете такую ​​строку, ее следует объявить как «const char *». Эта функция принимает «char *», и вы можете безопасно отправлять строки, которые могут быть изменены. Я буду обновлять свой пример, чтобы это отразить. – Harmeet

Смежные вопросы