gpt4 book ai didi

c++ - 为什么程序调用 strncat() 会产生段错误?

转载 作者:太空宇宙 更新时间:2023-11-04 15:24:54 25 4
gpt4 key购买 nike

我无法弄清楚为什么我的 g++ 编译程序在调用 strncat() 时出现段错误。

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

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

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

行遇到了段错误
char line[256]={"0"};
char nextchar[10]={"0"};
int length=0;
double rac;
double decc;
bool SPACE=false;
char * RAM="RA: ";
char * DECM="DEC: ";
if(AutoColData.good()){
while(!AutoColData.eof()) AutoColData.getline(line,256);
for(int i=0;i<strlen(line);i++){
nextchar[0]=line[i];
cout<<line[i];
if(isspace(nextchar[0])&& !SPACE) SPACE=!SPACE;
else if(SPACE && !isspace(nextchar[0])){
SPACE=!SPACE;
length++;
}
if(length==6) {
cout<<"\n"<<RAM<<nextchar<<"\n";
strncat(RAM,nextchar,1);
}
else if(length==7) strcat(DECM,nextchar);
}
}

我知道这里有一些草率的选择(整个“SPACE”东西很乱)。但我看不出有任何理由导致 Seg Fault。它运行良好,直到带有 strncat() 的行。 cout 工作正常,两个字符串都打印并在其中包含正确的数据,但随后 strncat 失败。我试过使用 malloc()、字符串,但似乎没有任何效果。如果有人能指出我在做什么愚蠢的事情,那将非常有帮助。谢谢。

最佳答案

RAM 被错误地声明为 char *,而实际上它应该是 const char *:字符串文字被读取-only,你不能给他们写信。您的 strncat 调用只是未定义的行为。

如果你想要一个可写的字符串,你可以制作一个足够大的字符数组:char RAM[100] = "RA: ";(这将在后面用零填充),或者更好的是,只需使用 std::string:

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

关于c++ - 为什么程序调用 strncat() 会产生段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10957028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com