2012-01-24 2 views
0

Здесь я даю строку ввода, как этот "/org/bluez/1509/hci0"Получение Сегментация Ошибка в Струнный Манипуляции

И я хочу, выход как этот /org/bluez/1509/hci0

Здесь я использую этот метод, но я получил ошибку сегментации.

void main() 
{ 
    char *str = "\"/org/bluez/1509/hci0\""; 
    int len = strlen(str); 
    printf("\nlength %d\n",len); 
    char *str1; 
    str1 = str+1; 
    printf("String 1 = %s\n",str1); 
    *(str1+ (strlen(str)-2)) = '\0'; 
    printf("\nString 1 = %s\n",str1); 
} 

Я получаю выход как этот

length 22 
String 1 = /org/bluez/1509/hci0" 
Segmentation fault 

Проблема с последней "характер.

Может ли тело помочь мне или предложить мне новый путь.?

+1

Строковые литералы не подлежат изменению. Попробуйте скопировать его в массив: 'char str [] =" \ "/ org/bluez/1509/hci0 \" ";'. Также 'main' возвращает целое число; измените это 'void' и добавьте' return 0; ', если вы хотите совместимость с C89 (также необходимо объявить все переменные перед любым кодом). – pmg

+0

Я предлагаю изменить '* (str1 + (strlen (str) -2)) = '\ 0';' to 'str1 [strlen (str1) - 1] = '\ 0';' – Lundin

ответ

4

Использование

char str[] = "\"/org/bluez/1509/hci0\""; 

Вместо указателя. Указатель только «указывает» на строковый литерал, который не модифицируется. Вы можете узнать больше об этом in this question и тонне других подобных. Это даже в c-faq, взгляните на него!

+0

также задана ошибка – user1089679

+0

ya its works..Thanks – user1089679

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