将较长的字符串复制到C中的较短字符串

时间:2014-07-21 19:41:46

标签: c string strcpy

对于下面的代码,为什么我没有得到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;
}

1 个答案:

答案 0 :(得分:4)

当您编写超出数组末尾时,您的程序会调用未定义的行为。

在C中,未定义的行为意味着任何事情都可能发生:你的程序每周四都会崩溃或崩溃。

如果程序调用未定义的行为,则C不要求编译器发出警告,因为编译器可能很难检测到所有未定义的行为调用。但是,C允许编译器发出警告或停止转换但不需要它。