我无法弄清楚为什么我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
这里有一些草率的选择,我知道(整个"太空"的事情很乱).但我认为没有任何理由可以解决Seg Fault问题.它运行良好,直到与strncat()的行.cout工作正常,两个字符串都打印并在其中包含正确的数据但是strncat失败了.我尝试过使用malloc(),字符串,似乎没什么用.如果有人能指出我正在做什么愚蠢的事情,那将是非常有帮助的.谢谢.
RAM被错误地声明为a char *,当它真的应该是const char *:字符串文字是只读的,并且不允许你写它们.你的strncat电话只是未定义的行为.
如果你想要一个可写的字符串,你可以创建一个足够大的char数组:( char RAM[100] = "RA: ";这将在后面填零),或者甚至更好,只需使用std::string:
std::string RAM = "RA: ";
RAM += nextchar;
Run Code Online (Sandbox Code Playgroud)