0

いくつかの問題を引き起こしているように見えるレガシープロジェクトで次のコードを見つけました:

for( ; *str; ++str )
    *str = tolower(*str);

問題は、tolower()の結果を*strに書き戻す必要があるときにSIGSEGVを取得することです。これは、printf()デバッグを使用して得たものであり、ここではJNIを使​​用しているため、Cライブラリにデバッガーをアタッチしても機能しないため、stracktraceが生成します。

Linuxでgccを使用してコンパイルすると、コードは失敗します。同じことをWindowsで実行すると(このクロスプラットフォームのセットアップにはCMakeが使用されます)、正常に機能します。

この理由をどこで見つけることができますか?感謝するヒント:)

ありがとう-マーカス

4

1 に答える 1

2

文字列リテラルは変更できません。

char blop[] = "modifiable string";
char *bla = "non-modifiable string";

*blop = tolower(*blop); // OK
*bla = tolower(*bla);   // not OK, modifying a string literal
于 2012-04-10T09:29:04.067 に答える