为什么strcat()导致休闲代码中的分段错误?

下面的代码为什么会导致分段错误?

#include<studio.h>
#include<string.h>

int main ()
{
    char *name="Kaveri";
    char *rd="Rajshekhar";
    strcat(name,rd);
    puts(name);
    return 0;
}
iCMS 回答:为什么strcat()导致休闲代码中的分段错误?

要使strcat()工作,目标缓冲区必须是可写的,并且必须足够长,以容纳具有空终止符的并置输出。在手册页中:

strcat()函数将src字符串追加到dest字符串,覆盖{{1}末尾的终止空字节('\0') },然后添加一个终止的空字节。字符串不能重叠,并且dest字符串必须有足够的空间用于结果。如果dest不够大,则程序行为无法预测;

在您的情况下,目标是指向字符串文字的第一个元素的指针,尝试进行修改以调用undefined behaviour

分段错误是不确定行为的众多副作用之一。

要解决此问题,

  • dest做成一个具有足够大尺寸的数组,例如

    name
  • 使用分配器功能为 char name[128] = "Kaveri"; 分配足够的内存,例如

    name

,然后将 char *name = malloc(128); //sizeof(char) == 1 strcpy(name,"Kaveri"); 用作name的目标缓冲区。

本文链接:https://www.f2er.com/1609895.html

大家都在问