对于下面的代码,为什么我没有得到seg错误或其他错误/警告,因为 my_dest 只声明了1个char?
它不会越界吗?
#include <stdio.h>
char *MyStrcpy(char* dest, const char* src);
int main(void)
{
char my_src[] = "1234567890";
char my_dest[1];
MyStrcpy(my_dest, my_src);
printf("new dest: %s\n", my_dest);
}
char *MyStrcpy(char* dest, const char* src)
{
char* addr = dest;
while (*dest++ = *src++);
return addr;
}
答案 0 :(得分:4)
当您编写超出数组末尾时,您的程序会调用未定义的行为。
在C中,未定义的行为意味着任何事情都可能发生:你的程序每周四都会崩溃或崩溃。
如果程序调用未定义的行为,则C不要求编译器发出警告,因为编译器可能很难检测到所有未定义的行为调用。但是,C允许编译器发出警告或停止转换但不需要它。