Ошибка сегментации (ядро сброшено)

0

У меня есть 3 файла, а именно concat.cpp, concat.h и test4concat.cpp, когда я компилирую и выполняю, я получаю следующую ошибку.
Введите количество разделов: 1 Ошибка сегментации (сброс ядра)

Он запрашивает первый сплит, а затем останавливается, так как я довольно новичок в cpp, мне понадобится помощь в этом. благодаря

Ниже приведены 3 файла

concat.cpp

#include <iostream>                 
#include <cstring>                  
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "concat.h"


using namespace std;



char concat(char* si,char* w,char* fid)
{


    strcat (si,w);

    strcat (si,fid);

     return 0;
}

concat.h

#ifndef TRY_H_INCLUDED
#define TRY_H_INCLUDED

char concat(char* si,char* w,char* fid);


#endif

test4concat.cpp

#include <iostream>                 
#include <cstring>                  
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <concat.h>
using namespace std;


int main ()
 {
 char* si;
 char* w;
 char* fid;


cout << "Enter the number of splits: ";
cin >> si;
cout << "Enter the number of watchdogs: ";
cin >> w;
cout << "Enter the Fid: ";
cin >> fid;
concat(si, w, fid);
cout<<"\nThe string is "<< si <<endl;


}

Проблема, с которой я сталкиваюсь:

Введите количество разделов: 1 Ошибка сегментации (сброс ядра)

  • 1
    Где это сегфо? Можете ли вы использовать отладчик, чтобы найти строку, где это происходит?
  • 4
    Если вы новичок в C ++, почему вы не используете конструкции C ++, такие как std :: string? Какие книги или учебные материалы вы используете, которые вы начали использовать char *?
Теги:

3 ответа

2
Лучший ответ

Вам необходимо выделить память, используя malloc (или новый, когда вы пишете в C++) перед чтением данных в si, w и fid.

si = new char[10];
w = new char[10];
fid = new char[10];

Конечно, вам нужно изменить размеры массивов символов для своих собственных требований.

  • 0
    Спасибо тебе было полезно.
  • 1
    @ user3444046 не забудьте позвонить удалить si, удалить w, удалить fid
Показать ещё 1 комментарий
1

Это было бы способом сделать это в C++, избегая всех рутинных ловушек распределения памяти:

#include <iostream>                 
#include <string>                  

int main ()
{
  std::string si, w, fid;

  std::cout << "Enter the number of splits: ";
  std::cin >> si;
  std::cout << "Enter the number of watchdogs: ";
  std::cin >> w;
  std::cout << "Enter the Fid: ";
  std::cin >> fid;
  si += w;
  si += fid;
  std::cout<<"\nThe string is "<< si << std::endl;

}
  • 0
    возврат 0 может быть добавлен
  • 0
    @lizusek Нет необходимости. Некоторым это нравится, но я не думаю, что это что-то здесь добавляет.
Показать ещё 2 комментария
0

"Введите количество разделов:";

Итак, вы хотите число, int.

int si;
cout << "Enter the number of splits: ";
cin >> si;

Если вы действительно хотите прочитать указатель, сначала выделите ему память с operator new:

int main() {
    char* pt = new char;
    cin >> pt;
    cout << (*pt);
    delete pt;
    return 0;
}

C++

Существует класс std::string являющийся std::string C++ символов, специализация std::basic_string с char как параметр шаблона. Он является гибким и может быть использован и в этом случае:

#include <iostream>                 
#include <string>                  

int main ()
{
  std::string si, w, fid;

  std::cout << "Enter the number of splits: ";
  std::cin >> si;
  std::cout << "Enter the number of watchdogs: ";
  std::cin >> w;
  std::cout << "Enter the Fid: ";
  std::cin >> fid;
  si += w;
  si += fid;

  std::cout<<"\nThe string is "<< si << std::endl;

  return 0;
}
  • 0
    char и int являются совместимыми типами, и это действительно не решает основную проблему с кодом.
  • 0
    Огромное спасибо за ваш вклад, но мне нужно int main () в отдельном файле, поэтому пришлось вызывать функцию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню