C に 2 つの配列があり、 array1 の N 個のセルを array2 にコピーしたいと考えています。
さらに、コピーされたセルの正確な数を取得したいと考えています。
関数strncpy
は戻り値を持たないため (または戻り値を持っていますが、私が探しているものではないため)、その関数には十分ではありません。
どんな提案も歓迎します
これはどう:
size_t copy_n(T * dst, T const * src, size_t n)
{
// method 1
while (n--) { *dst++ = *src++; }
// === OR ===
// method 2
memcpy(dst, src, n * sizeof(T));
return n;
}
使用法:
T a[10];
T b[25];
copy_n(b + 5, a + 2, 7); // copies a[2]...a[8] into b[5]...b[11]
これは、固定の割り当て可能な type に対してのみ機能しT
ます。汎用関数が必要な場合は、サイズ引数を渡し、memcpy
範囲全体で使用します。
size_t generic_copy_n(void * dst, void const * src, size_t size, size_t n)
{
memcpy(dst, src, n * size);
return n;
}
memcpyを使用できます
memcpy(Array2,Array1,sizeof(*Array1)*N);
これは問題なくコピーされ、「アクセス違反」というポップアップが自動的に表示される失敗を除いて、いったん通知されるとタスクが終了するため、いくつでも気にする必要はありません。
と同じ効果を達成したいstrncopy
だけでなく、コピーされたバイト数も知りたいと思います。これは、次のコードで実行できます。
size_t special_strncopy(char * dest, const char * src, size_t count){
const size_t original = count--;
if(count != 0){
while(*src && count--){
*dest++ = *src++;
}
}
*dest = '\0'; /* set null-termination symbol */
return original - count;
}
Notecount == 0
には 0 記号が含まれているため、未定義の動作が発生します。