我在尝试计算为什么我的g ++编译程序在strncat()
调用中发生故障时出现问题。为什么程序调用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(),字符串,似乎没有任何工作。如果任何人都可以指出我正在做什么愚蠢的事情,这将是非常有益的。谢谢。
好第一问题在于你试图修改字符串文字,即使尽管没有为你添加的额外字符预留空间。任何指向文字的字符指针都应该是'const char *'。也许你得到了这个警告,或者你的警告级别太低了,但GCC吐出'警告:从字符串常量到'char *'[-Wwrite-strings]'的弃用转换。 – chris
当你解决第一个问题时,while(!AutoColData.eof())'循环会产生另一个问题:http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a -loop-condition-considered-wrong – Flexo
如果这是真正的C++,那么使用'std :: string'会很容易得到正确的结果。否则,在尝试在末尾粘贴某些内容之前,请将'“RA:”'复制到足够大的缓冲区中。 –