首页 > 编程知识 正文

strcpy可以用二维数组吗,strcpy函数需要注意什么

时间:2023-05-03 08:50:37 阅读:265418 作者:907

strcpy、strncpy、strcat 和 strncat 函数描述及数组越界陷阱 strcpy 函数strncpy 函数strcat 函数strncat 函数

strcpy 函数

概要

  #include <string.h>

char *strcpy(char *restrict s1, const char *restrict s2);

描述

  strcpy 函数将 s2 所指向的字符串(包括末尾的空字符)复制到s1所指向的数组中。如果复制发生在重叠的对象之间,则行为是未定义的。

注意:strcpy 函数对 s2 的复制是以空字符 '' 为结束条件的。因此必须保证 s2 以 '' 结尾,否则将会导致数组越界。s1 必须能容纳 strlen(s2) + 1 个字符,否则也会导致数组越界。

结果字符串末尾必定添加 ‘’
最大复制字符数:strlen(s2) + 1 (+1 是包括了 ‘’)

返回

  strcpy 函数返回 s1 的值。
  
  
  

strncpy 函数

概要

  #include <string.h>

char *strncpy(char *restrict s1, const char *restrict s2, size_t n);

描述

  strncpy 函数从 s2 所指向的数组复制不超过n个字符(空字符后面的字符不会被复制)到 s1 所指向的数组[1]。如果复制发生在重叠的对象之间,则行为是未定义的。如果 s2 指向的数组是一个小于 n 个字符的字符串,则 s1 指向的数组的副本将追加空字符,直到总共写入 n 个字符为止

[1] 因此,如果在s2所指向的数组的前n个字符中没有空字符,则结果将不会以 ‘’ 结尾。

注意1:strncpy 函数对 s2 的复制是以写入 n 个字符为结束条件的,如果 s2 长度小于 n ,则会追加 n - strlen(s2) 个 '' 字符。

注意2:当 s2 长度等于或大于 n 时,不会在结果字符串的末尾添加 '' 字符,这很可能会在引用 s1 所指向的结果字符串时导致数组越界。s1 必须能容纳 n 个字符,否则也会导致数组越界。

结果字符串末尾不一定添加 ‘’
最大复制字符数:n

返回

  strncpy 函数返回 s1 的值。
  
  
  

strcat 函数

概要

  #include <string.h>

char *strcat(char *restrict s1, const char *restrict s2);

描述

  strcat 函数将 s2 所指向的字符串的副本(包括末尾的空字符)追加到 s1 所指向的字符串的末尾。s2 的初始字符覆盖 s1 末尾的空字符。如果复制发生在重叠的对象之间,则行为是未定义的。

注意1:strcat 函数对 s2 的复制是以空字符 '' 为结束条件的。因此必须保证 s2 以 '' 结尾,否则将会导致数组越界。

注意2:s2 的副本是追加到 s1 末尾的,因此必须保证 s1 是以 '' 字符结尾的,否则在追加时将会导致数组越界。s1 从末尾的 '' 字符(会被覆盖)开始,必须还能继续容纳 strlen(s2) + 1 个字符,否则也会导致数组越界。

结果字符串末尾必定添加 ‘’
最大复制字符数:strlen(s2) + 1 (+1 是包括了 ‘’)

返回

  strcat 函数返回 s1 的值。
  
  
  

strncat 函数

概要

  #include <string.h>

char *strncat(char *restrict s1, const char *restrict s2, size_t n);

描述

  strncat 函数从 s2 所指向的数组向 s1 所指向的字符串末尾追加不超过n个字符(空字符及其后面的字符不追加)。s2 的初始字符覆盖 s1 末尾的空字符。空字符总是被附加到结果中[2]。如果复制发生在重叠的对象之间,则行为是未定义的。

[2] 因此,s1 所指向的数组中的总的最大字符数是 strlen(s1) + n + 1。

注意:strncat 函数总是会追加空字符到结果中,因此 s1 从末尾的 '' 字符(会被覆盖)开始,必须还能继续容纳 n + 1 个字符,否则将会导致数组越界。

结果字符串末尾必定添加 ‘’
最大复制字符数:n + 1 (+1 是包括了 ‘’)

返回

  strncat 函数返回 s1 的值。
  
  
  

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。