代码之家  ›  专栏  ›  技术社区  ›  wuyefeibao

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

  •  -3
  • wuyefeibao  · 技术社区  · 12 年前

    对于下面的代码,我为什么不得到seg错误或其他错误/警告,因为 我的测试(_D) 仅用1个字符声明?

    它不会越过边界吗?

    #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 回复  |  直到 12 年前
        1
  •  4
  •   ouah    12 年前

    当您在数组末尾写入时,程序调用未定义的行为。

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

    C不要求编译器在程序调用未定义行为时发出警告,因为编译器很难检测所有未定义行为调用。然而,C允许编译器发出警告或停止翻译,但不需要。