字符** 和字符 [][] 的strcpy_s

strcpy_s for char** and char[][]

本文关键字:字符 strcpy      更新时间:2023-10-16

我使用了如下strcpy_s

char names[2][20];
strcpy_s(names[0],"Michael");
strcpy_s(names[1],"Danny");

而且效果很好。

但是当我改成char **

int size1=2;
int size2=20;
char **names=new char*[size1];
for(int i=0;i<size1;i++)
  names[i]=new char[size2];
strcpy_s(names[0],"Michael");
strcpy_s(names[1],"Danny");

它给了我这个错误消息:

错误 C2660:"strcpy_s":函数不接受 2 个参数

为什么会这样?我需要动态创建字符数组,那我该怎么办?

有两种

形式的strcpy_s(至少在Windows上):一种用于指针,一种用于数组。

errno_t strcpy_s(
   char *strDestination,
   size_t numberOfElements,
   const char *strSource 
);
template <size_t size>
errno_t strcpy_s(
   char (&strDestination)[size],
   const char *strSource 
); // C++ only

使用指针时,必须指定目标缓冲区的元素数:

strcpy_s(names[0], size2, "Michael");
strcpy_s(names[1], size2, "Danny");