我在尝试弄清楚为什么我的g ++编译程序seg在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 *:字符串文字是只读的,并且不允许您对其进行写入。您的strncat呼叫只是未定义的行为。

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

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

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

10-11 22:53