为什么程序调用 strncat() 会产生分段错误?
Why does program's calling strncat() generate segmentation fault?
我很难弄清楚为什么我的 g++ 编译的程序 seg 在strncat()
调用时出错。
我一直在这个网站和一般的谷歌搜索中跳来跳去,发现了许多类似的问题,但没有找到任何适合我的解决方案。这是一个更大的代码的一部分,我只能做很多事情来重新定义变量,因为代码不是我的。
代码的这一部分旨在做的只是在文件的最后一行读取,删除相关数据并连接到字符*
当我运行它时,我在带有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);
}
}
我知道这里有一些草率的选择(整个"空间"的事情很混乱)。但我看不出有任何理由这样做。它运行良好,直到带有 strncat() 的行。cout 工作正常,两个字符串都打印并在其中包含正确的数据,但随后 strncat 失败。我尝试使用 malloc(),字符串,但似乎没有任何效果。如果有人能指出我在做什么愚蠢的事情,那将是非常有帮助的。谢谢。
RAM
被错误地声明为char *
,而实际上它应该是一个const char *
: 字符串文字是只读的,不允许写入它们。您的strncat
呼叫只是未定义的行为。
如果你想要一个可写的字符串,你可以制作一个足够大的char数组:char RAM[100] = "RA: ";
(这将在后面填充零),或者更好的是,只需使用std::string
:
std::string RAM = "RA: ";
RAM += nextchar;
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?