分段故障(核心转储)

时间:2014-03-20 22:01:55

标签: c++

我有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 分段错误(核心转储)

3 个答案:

答案 0 :(得分:2)

在将数据读入si,w和fid之前,需要使用malloc(或者用C ++编写的新内容)来分配内存。

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

当然,您需要根据自己的要求修改字符数组的大小。

答案 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;

}

答案 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类是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;
}