1

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 つの引数を取りません

なぜこうなった?文字配列を動的に作成する必要があるのですが、どうすればよいですか?

4

1 に答える 1

9

strcpy_s(少なくともWindowsでは)2つの形式があります。1つはポインター用、もう1つは配列用です。

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");
于 2012-06-03T09:28:01.117 に答える