为什么strcat函数给我分段错误?

时间:2018-11-11 09:56:32

标签: c segmentation-fault dynamic-memory-allocation

我想将“ / bin /”和“ touch”串联起来,以便使用“ / bin / touch”。

在我的程序中,我有

        char* filePath = malloc((strlen("/bin/") + strlen(rv[0]))* sizeof(char));
        filePath = strcat("/bin/",rv[0])

首先,rv [0]包含字符串“ touch”。我使用malloc函数在内存中分配了10个字节,而filePath将是指向这10个字节的内存的指针。因为,串联的字符串的总长度(“ / bin / touch”)将为10。

程序正常执行,直到第二行给我一个分段错误。我在strcat函数上犯了任何错误吗?

1 个答案:

答案 0 :(得分:0)

看看reference如何使用strcat

char *strcat( char *dest, const char *src );
  

src指向的以空值结尾的字节字符串的副本追加到dest指向的以空值结尾的字节字符串的末尾。

因此,第一个参数必须是指向足够大的存储位置的指针,以容纳已经存在的C字符串和src所指向的C字符串的字节。

您调用strcat("/bin/",rv[0]),然后尝试将其写到存储字符串常量“ / bin /”的内存中,该内存通常位于只读内存中,因此会出现分段错误。

您需要先将"/bin/"复制到filePath指向的已分配内存中,然后再在其中附加rv[0]