C 为什么这段代码会导致运行时错误?

C 为什么这段代码会导致运行时错误?,c,buffer-overflow,C,Buffer Overflow,当您将b连接到a时,您是在写入未分配的内存,当您将b连接到a时,您是在写入未分配的内存,因为您是在您不拥有的内存位置写入数据 实际上,在运行strcat时,您将在字符串a的字符之后添加字符串b的字符。但是您没有声明字符串a之后的内存。,因为您正在一个不属于自己的内存位置写入数据 实际上,在运行strcat时,您将在字符串a的字符之后添加字符串b的字符。但您尚未声明字符串a之后的内存。字符串文字不可修改。字符串文字不可修改。 #include <stdio.h> #include &l

当您将b连接到a时,您是在写入未分配的内存,

当您将b连接到a时,您是在写入未分配的内存,

因为您是在您不拥有的内存位置写入数据


实际上,在运行strcat时,您将在字符串a的字符之后添加字符串b的字符。但是您没有声明字符串a之后的内存。

,因为您正在一个不属于自己的内存位置写入数据


实际上,在运行strcat时,您将在字符串a的字符之后添加字符串b的字符。但您尚未声明字符串a之后的内存。

字符串文字不可修改。字符串文字不可修改。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  char *a = "Hello ";
  const char *b = "World";

  printf("%s", strcat(a, b));
  system("PAUSE");

  return EXIT_SUCCESS;
}