# strncpy()

Fungsi `strncpy()` digunakan untuk menyalin sejumlah karakter tertentu dari string sumber ke string tujuan. Fungsi ini memberikan kontrol untuk mencegah *buffer overflow* dengan menyalin maksimal sejumlah karakter yang ditentukan, meskipun demikian, perhatikan bahwa penanganan karakter *null* (`'\0'`) perlu diwaspadai.

## Sintaks

```c
char *strncpy(char *dest, const char *src, size_t n);
```

* `dest` ➜ Pointer ke array (string) tujuan tempat string disalin.
* `src` ➜ Pointer ke string sumber.
* `n` ➜Jumlah maksimal karakter yang akan disalin.
* Mengembalikan:\
  Pointer ke string tujuan (`dest`).

### Penjelasan

* **Menyalin Sebagian String:**\
  Fungsi ini akan menyalin hingga `n` karakter dari `src` ke `dest`.
* **Penanganan Karakter Null:**\
  Jika panjang `src` kurang dari `n`, `strncpy()` akan mengisi sisa *buffer* dengan karakter *null* (`'\0'`).\
  Jika `src` memiliki panjang sama dengan atau lebih dari `n`, hasil salinan **tidak dijamin memiliki karakter&#x20;*****null*** di akhir, sehingga kamu harus memastikan `dest` diakhiri dengan `'\0'` jika diperlukan.
* **Keamanan Buffer:**\
  Dengan menentukan `n`, kamu bisa mencegah *buffer overflow*, asalkan ukuran `dest` setidaknya sebesar `n`.

## Contoh Pengunaan

### 1. Menyalin sebagian string

```c
#include <stdio.h>
#include <string.h>

int main() {
    char sumber[] = "Hello, World!";
    char tujuan[20];

    // Menyalin 5 karakter pertama dari 'sumber' ke 'tujuan'
    strncpy(tujuan, sumber, 5);
    // Karena strncpy tidak selalu menambahkan '\0', tambahkan secara manual
    tujuan[5] = '\0';

    printf("Sumber: %s\n", sumber);
    printf("Tujuan (5 karakter): %s\n", tujuan);

    return 0;
}
```

Hasilnya:

```bash
Sumber: Hello, World!
Tujuan (5 karakter): Hello
```

### 2. Menyalin string dan mengisi buffer dengan null

```c
#include <stdio.h>
#include <string.h>

int main() {
    char sumber[] = "Hi";
    char tujuan[10];

    // Menyalin hingga 10 karakter; karena sumber hanya 2 karakter, sisa buffer akan diisi '\0'
    strncpy(tujuan, sumber, 10);

    printf("Sumber: %s\n", sumber);
    printf("Tujuan: %s\n", tujuan);

    return 0;
}
```

Hasilnya:

```basic
Sumber: Hi
Tujuan: Hi
```

* Di sini, sisa *buffer* di `tujuan` akan terisi `'\0'` secara otomatis.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://rev.nairpaa.me/programming-language/c/reference/string.h/strncpy.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
