C言語で、入力された文字列の末尾にある改行を削除する関数removeEOLを以下のように実装しました。
しかし、これを実行すると、Segmentation faultが起きてしまいます。
main文のchar* str = "abc\n";
をchar str[10] = "abc\n"
などに変更した場合はSegmentation faultは起きず、正常に実行できます。
C++においても同様の問題が起きることを確認しています。
どうやら17行目のstr[endIndex] = 0x00
でSegmentation faultが起きているようですが、ではなぜ16行目のif(str[endIndex] == 0x0a)
ではSegmentation faultが起きないのでしょうか。
原因が全く分かりません。
ご回答いただければ幸いです。
#include <stdio.h> #include <string.h> void removeEOL(char* str) { int endIndex; int len = strlen(str); // 文字列長 if(len > 0) { endIndex = len - 1; } else { return; // 空文字の時は何もしない } // 末尾の改行コードを削除(LF,CR,CR+LF対応) if(str[endIndex] == 0x0a) { // LFの場合 str[endIndex] = 0x00; // NULLに置き換える endIndex--; // CR+LFの時用にインデックスを一つ戻す } if(str[endIndex] == 0x0d) { // CRの場合 str[endIndex] = 0x00; // NULLに置き換える } } int main(void) { char* str = "abc\n"; removeEOL(str); printf("%s\n", str); return 0; }

回答1件
あなたの回答
tips
プレビュー