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

iht*_*wot 0 c gdb concatenation

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

  strcat(tempString, "uptime");
  pFile = fopen (tempString,"r");
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*iwi 6

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

tempString = "/proc/";
Run Code Online (Sandbox Code Playgroud)

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

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

*正如JeremyP所指出的,如果它指向文本段,它是只读的并将导致段错误

  • 实际上,如果你对声明的假设是正确的(我确定它是),那么tempString指向文本段中的一个位置,这可能是只读的.这可能是seg故障的原因. (5认同)