C 语言strcpy函数的一个问题?

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

/*
* make sure all paths are below the current directory
*/
void sanitize(char *str)
{
    char *src, *dest;
    src = dest = str;

    while (*src) {
        if (strncmp(src, "/../", 4) == 0) {
            src += 3;
        } else if (strncmp(src, "//", 2) == 0) {
            src ++;
        } else {
            *dest++ = *src++;
        }
    }
        *dest = '\0';
        if (*str == '/')
            strcpy(str, str + 1);
        if (str[0] == '\0' || strcmp(str, "./") == 0
            || strcmp(str, "./..") == 0) {
                strcpy(str, ".");
        }
}

int main() {
    char buf[] = "/../status";
    sanitize(buf);
    printf("%s\n", buf);
}

上面的代码在执行strcpy(str, str + 1);的时候报错了 什么情况?

$ ./sanitize.out
[1]    19007 abort      ./sanitize.out

原型声明:char strcpy(char dest, const char *src);
头文件:#include <string.h> 和 #include <stdio.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

注意 : src和dest不能重叠。

  • 二叉树的高度
  • EF一对多新建删除
  • JS 里面的 delete object.key 到底删除了什么?
  • C++类内初始化与初始化列表
  • 小程序生成的参数二维码,如何获取二维码的数据统计,有没有能做二维码的统计工具推荐?
  • Windows下如何控制指定本地端口的流量?
  • gdb文件不识别的问题
  • 关于gui程序的控件的一些问题
  • 为什么 C++11 的 thread 库早已被各大编译器支持,而 C11 的 thread 到现在为止也没有好的支持?
  • VS for mac 能否运行 ASP .NET MVC 的项目?
  • <Expert C Programming>一书中关于数组和指针重要区别