我正在学习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;
}
答案 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。