C++ 为什么程序';调用strncat()生成分段错误?

C++ 为什么程序';调用strncat()生成分段错误?,c++,segmentation-fault,C++,Segmentation Fault,我很难理解为什么我的g++编译程序seg在调用strncat()时出错 我一直在这个网站和谷歌搜索,发现了许多类似的问题,但还没有找到适合我的解决方案。这是一个更大的代码的一部分,我可以做的只是重新定义变量,因为代码不是我的 这段代码的目的是读取文件的最后一行,删除相关数据并连接到一个字符* 当我运行它时,在带有strncat(RAM,nextchar,1) 字符行[256]={“0”}; char nextchar[10]={“0”}; 整数长度=0; 双rac; 双decc; 布尔空间=假;

我很难理解为什么我的g++编译程序seg在调用
strncat()
时出错

我一直在这个网站和谷歌搜索,发现了许多类似的问题,但还没有找到适合我的解决方案。这是一个更大的代码的一部分,我可以做的只是重新定义变量,因为代码不是我的

这段代码的目的是读取文件的最后一行,删除相关数据并连接到一个字符*

当我运行它时,在带有
strncat(RAM,nextchar,1)

字符行[256]={“0”};
char nextchar[10]={“0”};
整数长度=0;
双rac;
双decc;
布尔空间=假;
char*RAM=“RA:”;
char*DECM=“DEC:”;
if(autocldata.good()){
而(!AutoColData.eof())AutoColData.getline(第256行);

对于(int i=0;i
RAM
被错误地声明为
char*
,而实际上它应该是
const char*
:字符串文本是只读的,不允许写入它们。您的
strncat
调用只是未定义的行为

如果您想要一个可写字符串,您可以创建一个足够大的字符数组:
char-RAM[100]=“RA:”
(这将在后面进行零填充),甚至更好,只需使用
std::string

std::string RAM = "RA: ";
RAM += nextchar;

首先,尽管没有为额外的字符保留空间,但您仍试图修改字符串文本您可以添加。任何指向文本的字符指针都应该是
const char*
。可能您收到了此警告,或者您的警告级别太低,但GCC发出了
警告:从字符串常量转换为“char*”[-Wwrite strings]当你修复第一个问题时,你也会有另一个问题,使用<代码>((AutoCoDeCase.Ef()))/Cult>循环:如果这是真正的C++,那么这将更容易正确地使用<代码> STD::String 。否则,复制<代码>“RA”:在试图粘贴到最后的一个文件之前,将代码输入到一个足够大的缓冲区。所以当我声明它时,需要给字符串更多的内存?沿着CAR*RAC(32)的行,然后添加数据RAC=“Ra::”;请删除C++标签并调用它。
std::string RAM = "RA: ";
RAM += nextchar;