2012-01-24 17 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'を変更し、C89互換性が必要な場合は 'return 0;'を追加します(コードステートメントの前にすべての変数も宣言する必要があります)。 – pmg

+0

str1 [strlen(str1) - 1] = '\ 0'; ' – Lundin

答えて

4

使用

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

ポインタの代わりに。ポインタは、変更不可能な文字列リテラルに「指す」だけです。このin this questionと他の同様のものの詳細については、こちらをご覧ください。それはc-faqでさえ、それを見てみましょう!

+0

のエラーもまた – user1089679

+0

に変更して、 '*(str1 +(strlen(str)-2))=' \ 0 ';を'作品..ありがとう – user1089679