Bagaimana cara menggunakan Strcpy() dalam bahasa C?

How Use Strcpy C Language



Pada artikel ini, kita akan belajar tentang fungsi strcpy() dalam bahasa pemrograman C. Fungsi strcpy() adalah fungsi pustaka standar yang sangat populer untuk melakukan operasi penyalinan string dalam bahasa pemrograman C. Ada beberapa file header standar dalam bahasa pemrograman C untuk melakukan operasi standar. String.h adalah salah satu file header tersebut, yang menyediakan beberapa fungsi library standar untuk melakukan operasi string. Fungsi strcpy() adalah salah satu fungsi library yang disediakan oleh string.h.

Sintaksis:

arang* strcpy (arang*tujuan_lokasi, konstan arang*source_string);

Memahami strcpy():

Satu-satunya tujuan dari fungsi strcpy() adalah untuk menyalin string dari sumber ke tujuan. Sekarang, mari kita lihat sintaks fungsi strcpy() di atas. Fungsi strcpy() mampu menerima dua parameter –







  • karakter * tujuan
  • const char * sumber

Sumber adalah konstanta di sini untuk memastikan bahwa fungsi strcpy() tidak dapat mengubah string sumber. Fungsi strcpy() menyalin semua karakter (termasuk karakter NULL di akhir string) dari string sumber ke tujuan. Setelah operasi penyalinan selesai dari sumber ke tujuan, fungsi strcpy() mengembalikan alamat tujuan kembali ke fungsi pemanggil.



Poin penting yang perlu diperhatikan di sini adalah, fungsi strcpy() tidak menambahkan string sumber dengan string tujuan. Ini lebih menggantikan konten tujuan dengan konten string sumber.



Juga, fungsi strcpy() tidak melakukan pemeriksaan apa pun untuk memastikan bahwa ukuran tujuan lebih dari string sumber, itu sepenuhnya menjadi tanggung jawab programmer.





Contoh:

Sekarang, kita akan melihat beberapa contoh untuk memahami fungsi strcpy():

  1. strcpy() – Operasi Normal (example1.c)
  2. strcpy() – Kasus-1 (contoh2.c)
  3. strcpy() – Kasus-2 (contoh3.c)
  4. strcpy() – Kasus-3 (contoh4.c)
  5. strcpy() – Versi Buatan Pengguna (example5.c)
  6. strcpy() – Versi Buatan Pengguna Dioptimalkan (example6.c)

strcpy() – Operasi Normal (example1.c):

Contoh program ini menunjukkan cara melakukan operasi penyalinan string normal menggunakan fungsi strcpy() dalam bahasa pemrograman C. Perlu diketahui bahwa panjang string tujuan adalah 30 (char destination_str[30]; ), yang lebih besar dari panjang string sumber (panjangnya 18 termasuk karakter NULL) sehingga tujuan dapat menampung semua karakter dari string sumber.



#termasuk
#termasuk

ke dalamutama()
{
arangsource_str[] = 'www.linuxhint.com';
arangtujuan_str[30];

printf ('Sebelum memanggil fungsi strcpy() : ');
printf ('TString Sumber = %s ',source_str);
printf ('TString Tujuan = %s ',tujuan_str);

strcpy (tujuan_str,source_str);

printf ('Setelah menjalankan fungsi strcpy() : ');
printf ('TString Sumber = %s ',source_str);
printf ('TString Tujuan = %s ',tujuan_str);

kembali 0;
}

strcpy() – Kasus-1 (contoh2.c):

Maksud dari program contoh ini adalah untuk menjelaskan dengan jelas apa yang terjadi ketika panjang string tujuan kurang dari panjang string sumber. Dalam kasus seperti itu, lokasi tujuan tidak akan memiliki cukup spasi/byte untuk menampung semua karakter (termasuk karakter NULL) dari string sumber. Dua hal yang harus selalu Anda ingat:

  1. Fungsi strcpy() tidak akan memeriksa apakah tujuan memiliki cukup ruang.
  2. Ini bisa berbahaya dalam perangkat lunak yang disematkan karena strcpy() akan menggantikan area memori di luar batas tujuan.

Mari kita lihat contoh programnya. Kami telah mendeklarasikan source_str dan menginisialisasinya ke www.linuxhint.com , yang akan mengambil 18 byte dalam memori untuk disimpan, termasuk karakter Null di akhir string. Kemudian, kita telah mendeklarasikan array karakter lain yaitu destination_str dengan ukuran hanya 5. Jadi, destination_str tidak dapat menampung string sumber dengan ukuran total 18 byte.

Tapi, tetap saja, kita memanggil fungsi strcpy() untuk menyalin string sumber ke string tujuan. Dari output di bawah ini, kita dapat melihat strcpy() tidak mengeluh sama sekali. Dalam hal ini, fungsi strcpy() akan mulai menyalin karakter dari string sumber (sampai menemukan karakter NULL dalam string sumber) ke alamat tujuan (meskipun batas tujuan melebihi). Itu berarti fungsi strcpy() tidak melakukan pemeriksaan batas untuk array tujuan. Akhirnya, fungsi strcpy() akan menimpa alamat memori yang tidak dialokasikan ke larik tujuan. Inilah sebabnya mengapa fungsi strcpy() akan berakhir menimpa lokasi memori yang mungkin dialokasikan ke variabel yang berbeda.

Dalam contoh ini, kita dapat melihat dari output di bawah ini, bahwa fungsi strcpy() menimpa string sumber itu sendiri. Programmer harus selalu berhati-hati dengan perilaku seperti itu.

#termasuk
#termasuk

ke dalamutama()
{
arangsource_str[] = 'www.linuxhint.com';
arangtujuan_str[5];

printf ('Sebelum memanggil fungsi strcpy() : ');
printf ('TString Sumber = %s ',source_str);
printf ('TString Tujuan = %s ',tujuan_str);

strcpy (tujuan_str,source_str);

printf ('Setelah menjalankan fungsi strcpy() : ');
printf ('TString Sumber = %s ',source_str);
printf ('TString Tujuan = %s ',tujuan_str);

//printf('Alamat Sumber = %u (0x%x) ', &source_str[0], &source_str[0]);
//printf('Alamat Tujuan = %u (0x%x) ', &destination_str[0], &destination_str[0]);

kembali 0;
}

strcpy() – Kasus-2 (contoh3.c):

Program ini menggambarkan situasi ketika ukuran string tujuan lebih besar dari ukuran string sumber dan string tujuan sudah diinisialisasi dengan beberapa nilai. Dalam contoh ini, kami telah menginisialisasi:

  • source_str ke www.linuxhint.com [ukuran = 17+1 = 18]
  • destination_str ke I_AM_A_DESTINATION_STRING [ukuran = 25+1 = 26]

Fungsi strcpy() akan menyalin semua 17 karakter dan karakter NULL dari string sumber ke string tujuan. Tapi, itu tidak akan menggantikan/mengubah byte yang tersisa (Byte 19 menjadi 26, satu berbasis) di array tujuan. Kami telah menggunakan for loop untuk mengulangi larik tujuan dan mencetak seluruh larik untuk membuktikan bahwa byte-19 hingga 26 tidak berubah dalam larik tujuan. Itu sebabnya kami melihat output terakhir sebagai:

www.linuxhint.com_STRING .

#termasuk
#termasuk


/* Program ini menggambarkan situasi ketika :

ukuran string tujuan > ukuran string sumber

dan kami menjalankan fungsi strcpy() untuk menyalin
string sumber ke tujuan.

Catatan: Ukuran string tujuan harus selalu
lebih besar dari atau sama dengan string sumber.
* /

ke dalamutama()
{
arangsource_str[] = 'www.linuxhint.com';
arangtujuan_str[26] = 'I_AM_A_DESTINATION_STRING';

printf ('Sebelum memanggil fungsi strcpy() : ');
printf ('TString Sumber = %s ',source_str);
printf ('TString Tujuan = %s ',tujuan_str);

strcpy (tujuan_str,source_str);

printf ('Setelah menjalankan fungsi strcpy() : ');
printf ('TString Sumber = %s ',source_str);
printf ('TString Tujuan = %s ',tujuan_str);


/* mencetak string tujuan menggunakan for loop*/
printf ('Cetak string tujuan char demi char : ');
printf ('TString Tujuan = ');

untuk(ke dalamSaya=0;Saya<25;Saya++)
{
printf ('% C',tujuan_str[Saya]);
}
printf (' ');

kembali 0;
}

strcpy() – Kasus-3 (contoh4.c):

Kami telah menganggap program ini sebagai contoh untuk menunjukkan bahwa kami tidak boleh memanggil strcpy() dengan string literal sebagai tujuan. Ini akan menyebabkan perilaku tidak terdefinisi dan akhirnya, program akan macet.

#termasuk
#termasuk

ke dalamutama()
{
arangsource_str[] = 'www.linuxhint.com';

printf ('Sebelum memanggil fungsi strcpy() : ');
printf ('TString Sumber = %s ',source_str);

/* Jangan pernah memanggil strcpy() dengan string literal sebagai tujuan.
Program akan macet.
* /

strcpy ('destination_str',source_str);

printf ('Setelah menjalankan fungsi strcpy() : ');
printf ('TString Sumber = %s ',source_str);

kembali 0;
}

strcpy() – Versi Buatan Pengguna (example5.c):

Dalam program contoh ini, kami telah menunjukkan cara menulis versi fungsi strcpy() yang ditentukan pengguna.

#termasuk
arang *strcpy_user_defined(arang *tujuan, konstan arang *src);

/* Versi fungsi strcpy() yang ditentukan pengguna */
arang *strcpy_user_defined(arang *tujuan, konstan arang *src)
{
arang *tujuan_backup=tujuan;

ketika(*src! = ' 0') /* Ulangi sampai '' ditemukan.*/
{
*tujuan= *src; /* Salin char sumber ke tujuan */
src++; /* Penambahan penunjuk sumber */
tujuan++; /* Kenaikan penunjuk tujuan */
}

*tujuan= ' 0'; /* Sisipkan '' di tujuan secara eksplisit*/

kembalitujuan_backup;
}

ke dalamutama()
{
arangsource_str[] = 'www.linuxhint.com';
arangtujuan_str[30];

printf ('Sebelum memanggil fungsi penyalinan string yang ditentukan pengguna: ');
printf ('TString Sumber = %s ',source_str);
printf ('TString Tujuan = %s ',tujuan_str);

/* Memanggil fungsi penyalinan string yang ditentukan pengguna */
strcpy_user_defined(tujuan_str,source_str);

printf ('Setelah menjalankan fungsi penyalinan string yang ditentukan pengguna: ');
printf ('TString Sumber = %s ',source_str);
printf ('TString Tujuan = %s ',tujuan_str);

kembali 0;
}

strcpy() – Versi Buatan Pengguna Dioptimalkan (example6.c):

Sekarang, dalam contoh program ini, kita akan mengoptimalkan versi strcpy() yang ditentukan pengguna.

#termasuk
arang *strcpy_user_defined(arang *tujuan, konstan arang *src);


/* Versi optimal dari fungsi strcpy() yang ditentukan pengguna */
arang *strcpy_user_defined(arang *tujuan, konstan arang *src)
{
arang *tujuan_backup=tujuan;

ketika(*tujuan++ = *src++)
;

kembalitujuan_backup;
}

ke dalamutama()
{
arangsource_str[] = 'www.linuxhint.com';
arangtujuan_str[30];

printf ('Sebelum memanggil fungsi penyalinan string yang ditentukan pengguna: ');
printf ('TString Sumber = %s ',source_str);
printf ('TString Tujuan = %s ',tujuan_str);

/* Memanggil fungsi penyalinan string yang ditentukan pengguna */
strcpy_user_defined(tujuan_str,source_str);

printf ('Setelah menjalankan fungsi penyalinan string yang ditentukan pengguna: ');
printf ('TString Sumber = %s ',source_str);
printf ('TString Tujuan = %s ',tujuan_str);

kembali 0;
}

Kesimpulan :

Fungsi strcpy() adalah fungsi library yang sangat populer dan berguna untuk melakukan operasi penyalinan string dalam bahasa pemrograman C. Ini terutama digunakan untuk menyalin string dari satu lokasi ke lokasi lain. Namun, kami ingin menegaskan kembali fakta bahwa fungsi strcpy() tidak melakukan pemeriksaan batas untuk larik tujuan, yang dapat menyebabkan bug perangkat lunak yang serius jika diabaikan. Itu selalu menjadi tanggung jawab programmer untuk memastikan array tujuan memiliki cukup ruang untuk menampung semua karakter dari string sumber termasuk karakter NULL.