gpt4 book ai didi

c - 静态全局变量与全局变量 C

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:56 27 4
gpt4 key购买 nike

我有下面的程序。如果我将变量 a、b、c 声明为静态全局变量,则会出现段错误,但如果我将它们声明为非静态全局变量或局部变量,则不会出现段错误。为什么它会以这种方式表现?我知道变量可以存储的数据比变量多,但是为什么只有声明为静态时才会出现段错误?静态声明的变量是否存储在不允许覆盖的堆栈帧的某些不同部分?

编辑:我知道 strcpy 不安全。但这不是我的问题。我想了解为什么一个溢出会出现段错误,而另一个溢出可能不会出现段错误。

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

static char a[16];
static char b[16];
static char c[32];

int main(int argc, char *argv[]){

// char a[16];
//char b[16];
//char c[32];
strcpy(a,"0123456789abcdef");
strcpy(b,"0123456789abcdef");
strcpy(c,a);
strcpy(c,b);
printf("a = %s\n",a);
return 0;
}

最佳答案

注意 C 中的 const char* 字符串总是以 0 结尾,这意味着字符串“0123456789abcdef”实际上是 17 个字符:“0123456789abcdef\0”

我建议您始终使用安全版本

strncpy() 

您还可以查看明确告诉您包含空字符的文档。

http://www.cplusplus.com/reference/cstring/strcpy/

关于c - 静态全局变量与全局变量 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29501783/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com