试图在C中连接字符串的代码有什么问题?

时间:2011-02-01 19:20:57

标签: c gdb concatenation

我只是试图在C中连接两个字符串,我不知道为什么但是我遇到了段错误。我使用gdb将其跟踪到下面代码行的第一行。

  strcat(tempString, "uptime");
  pFile = fopen (tempString,"r");

tempString =“/ proc /”。我只想将字符串“uptime”附加到tempString,然后尝试打开文件(如果它存在于/ proc文件夹中)。当strcat()调用memcpy()时,就会发生实际的段错误。

2 个答案:

答案 0 :(得分:6)

您没有在这些行之前显示某些代码,但很可能使用

分配了tempString
tempString = "/proc/";

这使它成为常数(具有恒定的mem大小分配)
第二行strcat将尝试覆盖字符串常量,它将超出缓冲区的6个字节放入未知区域(如果成功,则为*)。

负责任地使用strcat:http://beej.us/guide/bgc/output/html/multipage/strcat.html

*正如JeremyP指出的那样,如果它指向文本段,则它是只读的并且会导致段错误

答案 1 :(得分:2)

如果您向我们展示了定义tempString的行,这将有助于确认。但是,看起来你有类似char * tempString = "/proc/";的东西,并试图修改它。由于它是带引号的字符串,您可能会也可能无法修改它,如果您尝试,很可能会出现分段错误。 (此外,"/proc/"长度为char,并且在末尾添加任何内容都会覆盖某些内容或其他内容。)

对于可修改的字符串,您需要拥有自己的缓冲区,在堆栈或堆上分配,并且需要确保它足够长。