C-mac终端中止陷阱6错误

时间:2016-11-30 01:39:20

标签: c

我正在学习C,最近我尝试了一些来自youtube的教程,我正在运行这段代码,但它不起作用我不知道为什么......当我在终端上运行时,给出错误"中止陷阱:6"

我正在学习本教程:https://youtu.be/7F-Q2oVBYKk?list=PL6gx4Cwl9DGAKIXv8Yr6nhGJ9Vlcjyymq

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main ()
{
  char name[15] = "John Snow";
  printf("My name is %s\n", name);

  name[2] = 'z';                   
  printf("My name is %s\n", name);

  char food[] ="pizza";
  printf("The best food is %s \n", food);

  strcpy(food, "bacon");
  printf("The best food is %s \n", food);

  return 0;
}

2 个答案:

答案 0 :(得分:3)

错误意味着您正在写入您不拥有的内存。如果您尝试复制的字符串长于您为食物指定的字符串('pizza'),则可能会发生。在这种情况下,您可能需要将字符串复制到分配给字符串常量的内存位置。

试试这个: -

char *food = malloc(sizeof(char)*6); 
strcpy(food, "pizza"); 
printf("The best food is %s \n", food); 

strcpy(food, "bacon");`
printf("The best food is %s \n", food);

答案 1 :(得分:-2)

您的程序中有一个经典的堆栈溢出漏洞。这是由于您使用了不安全的c库函数strcpy。将此函数替换为其安全等效的strncpy。您可以在owasp site上详细了解这些类型的漏洞以及如何避免它们。这篇stackoverflow帖子详细介绍了unsafe c functions and their replacements