zoukankan      html  css  js  c++  java
  • C 标准库

    strcpy

    • Copies the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point).
    • To avoid overflows, the size of the array pointed by destination shall be long enough to contain the same C string as source (including the terminating null character), and should not overlap in memory with source.
    • 复制 source 所指向的空终止字节字符串,包含空终止符,到首元素为 destination 所指的字符数组。
    • 若 destination 数组长度不足则行为未定义。
    • 若字符串覆盖则行为未定义。
    • 若 destination 不是指向字符数组的指针或 source 不是指向空终止字节字符串的指针则行为未定义。
    char * strcpy ( char * destination, const char * source );
    

    Parameters

    destination

    • Pointer to the destination array where the content is to be copied.
    • 指向要写入的字符数组的指针

    source

    • C string to be copied.
    • 指向要复制的空终止字节字符串的指针

    Return Value

    • destination is returned.
    • 该函数返回一个指向最终的目标字符串 dest 的指针。

    Example

    //
    // Created by zhangrongxiang on 2018/2/2 15:01
    // File strcpy
    //
    
    #define __STDC_WANT_LIB_EXT1__ 0
    
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
        char *src = "Take the test.";
    //  src[0] = 'M' ; // 这会是未定义行为
        char dst[strlen(src) + 1]; // +1 以适应空终止符
        strcpy(dst, src);
        dst[0] = 'M'; // OK
        printf("src = %s
    dst = %s
    ", src, dst);
    
    #ifdef __STDC_LIB_EXT1__
        set_constraint_handler_s(ignore_handler_s);
        int r = strcpy_s(dst, sizeof dst, src);
        printf("dst = "%s", r = %d
    ", dst, r);
        r = strcpy_s(dst, sizeof dst, "Take even more tests.");
        printf("dst = "%s", r = %d
    ", dst, r);
    #endif
    
        char string[10];
        char str[] = "Hello World";
        char *string2 = str;
        printf("%s
    ", string2); //Hello World
    
        printf("%d
    ", (int) sizeof(string)); //10
        printf("%d
    ", (int) strlen(string)); //0
    
        printf("%d
    ", (int) sizeof(string2)); //8
        printf("%d
    ", (int) strlen(string2)); //11
    
        printf("%d
    ", (int) sizeof(str)); //12
        printf("%d
    ", (int) strlen(str)); //11
    
        /******************行为未定义********************************/
        /** strcpy(string, string2);*/
        /** printf("%s
    ", string);*/
        /** printf("%s
    ", string2);*/
        /***********************************************************/
    
        char str2[sizeof(str)];
        strcpy(str2, string2);
        printf("%s
    ", str2); //Hello World
        strcpy(str2, "hi");
        printf("%s
    ", str2); //hi
        //strcpy(str2, "everything is file"); //strcpy.c:53:5: warning: '__builtin_memcpy' writing 19 bytes into a region of size 12 overflows the destination [-Wstringop-overflow=]
        //printf("%s
    ", str2); //everything is file
    
        char str3[] = "hello world!hello everyone";
        printf("%s
    ", str3); //hello world!
        printf("%d
    ", (int) strlen(str3)); //12
        printf("%d
    ", (int) sizeof(str3)); // 28
    
        return EXIT_SUCCESS;
    }
    

    文章参考

  • 相关阅读:
    又到黄金季节,该跳槽吗?怎么跳?
    分布式事务 6 个技术方案
    15 个 MyBatis 技巧,赶紧收藏吧!
    你的工资被倒挂了吗
    终于知道 Java agent 怎么重写字节码了
    每天的工作,你腻了吗?
    10 分钟轻松学会 Jackson 反序列化自动适配子类
    SpringMVC异步处理的 5 种方式
    Linux Cron 定时任务
    人类简史、软件架构和中台
  • 原文地址:https://www.cnblogs.com/zhangrxiang/p/8405546.html
Copyright © 2011-2022 走看看