У меня есть 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 Ошибка сегментации (сброс ядра)
Вам необходимо выделить память, используя malloc (или новый, когда вы пишете в C++) перед чтением данных в si, w и fid.
si = new char[10];
w = new char[10];
fid = new char[10];
Конечно, вам нужно изменить размеры массивов символов для своих собственных требований.
Это было бы способом сделать это в 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;
}
"Введите количество разделов:";
Итак, вы хотите число, 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;
}
Существует класс 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;
}
char
и int
являются совместимыми типами, и это действительно не решает основную проблему с кодом.