Program Penyimpanan String Bahasa C
/* OR */
char str[4] = {‘G’, ‘f’, ‘G’, '\0'}; /* '\0' adalah string terminator */
Ketika string dideklarasikan sebagai karakter array, maka string tersebut akan disimpan seperti tipe data array lainnya dalam bahasa C. Contoh, jika str[] adalah variabel auto, maka string akan disimpan pada segmen stack, namun jika string disimpan sebagai tipe variabel global atau static, maka string akan disimpan pada segmen data.
Penyimpanan string untuk pointer karakter dapat dilakukan dengan dua cara:
satu, String Read Only dalam Segmen Berbagi.
Ketika sebuah nilai string secara langsung ditetapkan ke pointer, pada sebagian besar kompilator, string tersebut akan disimpan dalam block read only atau secara umum pada segmen data yang dibagikan antara fungsi.
char *str = "MKN";
Pada contoh variabel str nilai "MKN" disimpan dalam lokasi berbagi read only, namun pointer str dismpan di dalam memori read-write. Dapat dilakukan perubahan str untuk menunjuk nilai lokasi yang lain tetapi tidak dapat dilakukan perubahan nilai str saat ini. Jadi, string semacam ini hanya boleh digunakan ketika user tidak ingin melakukan perubahan string pada tahap lanjutan dalam suatu program.
dua, Alokasi Dinamis pada Segmen Heap
String disimpan seperti halnya alokasi memori dinamis pada bahasa C dan dibagikan pada berbagai fungsi.
char *str;
int size = 4; /*satu ruang ekstra untuk ‘\0’*/
str = (char *)malloc(sizeof(char)*size);
*(str+0) = 'G';
*(str+1) = 'f';
*(str+2) = 'G';
*(str+3) = '\0';
Perhatikan beberapa contoh berikut untuk lebih memahami tentang cara penyimpanan string.
Contoh 1, Melakukan Modifikasi String
Program berikut akan mengalami crash karena baris program *(str+1) = 'n' mencoba untuk menulis pada memori read only.
Contoh:
int main()
{
char *str;
str = "MKN";
// disimpan pada bagian bagian
// dari read only data segmen
*(str+1) = 'n';
// Permasalahan: mencoba untuk
// memodifikasi memori read
// only
getchar();
return 0;
}
Contoh:
int main()
{
char str[] = "MkN";
// Disimpan pada segmen stack
// seperti variabel auto
// lainnya
*(str+1) = 'n';
// Tidak ada masalah: String
// adalah MKN
getchar();
return 0;
}
Contoh:
int main()
{
int size = 4;
// Disimpan pada segmen heap
// seperti alokasi memori
// dinamis lainnya
char *str = (char *)malloc(sizeof(char)*size);
*(str+0) = 'M';
*(str+1) = 'K';
*(str+2) = 'N';
*(str+3) = '\0';
*(str+1) = 'n';
// No problem: String saai ini
// adalah MKN
getchar();
return 0;
}
char *getString()
{
char *str = "MKN";
// Disimpan pada bagian read
// only dari segmen berbagi
// No Problem: tetap di alamat
// str setelah return
// getString()
return str;
}
int main()
{
printf("%s", getString());
getchar();
return 0;
}
char *getString()
{
int size = 4;
char *str = (char *)malloc(sizeof(char)*size);
// Disimpan dalam segmen heap
*(str+0) = 'M';
*(str+1) = 'K';
*(str+2) = 'N';
*(str+3) = '\0';
// No problem: string tetap
// pada str setelah return
// getString()
return str;
}
int main()
{
printf("%s", getString());
getchar();
return 0;
}
Contoh:
char *getString()
{
char str[] = "MKN";
// Disimpan pada segmen stack.
// Problem: string mungkin
// tidak dapat ditampilkan
// setelah return getString().
// Permasalahan tersebut dapat
// diselesaikan jika
// menambahkan static sebelum
// char, atau static char
// str[] = "MKN";.
return str;
}
int main()
{
printf("%s", getString());
getchar();
return 0;
}
- Tipe Data Terlarang Untuk Array Bahasa C [klik]
- Variabel Length Array Bahasa C dan Fungsinya [klik]
- Notasi Shorthand Array Bahasa C dan Fungsinya [klik]
- Mengakses Array di Luar Batas Bahasa C [klik]
- Strcpy Bahasa C dan Fungsinya [klik]
- Membandingkan Dua String Menggunakan STRCMP pada Bahasa C [klik]
- Menduplikasi Nilai String Menggunakan STRDUP dan STRNDUP pada Bahasa C [klik]
Apa yang dimaksud dengan string pada bahasa C?
BalasHapusString pada bahasa C adalah beberapa area memori yang telah dicadangkan dalam beberapa cara melaui alokasi memori statis ataupun alokasi memori dinamis yang berisi urutan byte yang mewaliki urutan karakter menurut beberapa aturan pengkodean ASCII dan UTF-8.
HapusSring merupakan urutan nilai karakter yang dapat diubah-ubah.
HapusString adalah array dimana satu karakter ditempatkan pada setiap sel array tersebut, dengan nilai karakter '\0' ditempatkan pada sel yang mengikuti karakter terakhir dalam string, yang menandai akhir dari string.
HapusBahasa C sebenarnya tidak memiliki tipe data khusus yang disebut string. String disebuat sebagai array karakter dalam bahasa C.
BalasHapus