Strcmp Проблема Segmantation Метод вставки ошибки не работает - PullRequest
1 голос
/ 16 апреля 2020

Я использовал GDB и понял, что проблема в достижении этой строки кодов:

в основном:

'' '

    else if(strcmp("insert",arg[1])==0){
    insert("a.txt","Cem","Mec","Cem","-a");

}

' '' Метод:

'' '

void insert (char * имя файла, char * вставленоWord, char * searchWord, char * oldsearchedWord, char * ab) {

if(strcmp("-a",ab) == 0){

    strcat(searchedWord," ");
    strcat(searchedWord, insertedWord);
    replace(filename,searchedWord,oldsearchedWord); 

}
else if(strcmp("-b",ab) == 0){

    strcat(insertedWord," ");
    strcat(insertedWord, searchedWord);
    replace(filename,insertedWord,oldsearchedWord);

}

} '' '

и ошибка:

Запрограммировать полученный сигнал SIGSEGV, Ошибка сегментации. __strcmp_sse2_unaligned () в ../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S:32 32 ../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S: такого файла или каталога нет.

Я проверил мой метод замены. Это работает.

1 Ответ

0 голосов
/ 16 апреля 2020

Вы пытаетесь strcat, используя строковый литерал в качестве цели. Вы не можете делать это, потому что строковые литералы обычно помещаются в сегменты данных только для чтения, и попытка изменить их - неопределенное поведение.

переключиться на

char insertedWord[256] = "cem";
char searchedWord[256] = "mec";
...

и затем передать их (modfiable ) вместо массивов.

...