Bagaimana cara menambahkan dua string?
Saya mencoba name = "derp" + "herp";
, tetapi saya mendapat kesalahan:
Ekspresi harus memiliki tipe integral atau enum
C tidak memiliki dukungan untuk string yang dimiliki beberapa bahasa lain. Sebuah string dalam C hanyalah sebuah pointer ke arraychar
yang diakhiri oleh karakter nol pertama. Tidak ada operator penggabungan string di C.
Gunakan strcat
untuk menggabungkan dua string. Anda dapat menggunakan fungsi berikut untuk melakukannya:
#include <stdlib.h>
#include <string.h>
char* concat(const char *s1, const char *s2)
{
char *result = malloc(strlen(s1) + strlen(s2) + 1); // +1 for the null-terminator
// in real code you would check for errors in malloc here
strcpy(result, s1);
strcat(result, s2);
return result;
}
Ini bukan cara tercepat untuk melakukan ini, tetapi Anda tidak perlu khawatir tentang itu sekarang. Perhatikan bahwa fungsi mengembalikan blok memori yang dialokasikan tumpukan ke pemanggil dan meneruskan kepemilikan memori itu. Ini adalah tanggung jawab penelepon ke free
memori ketika tidak lagi diperlukan.
Panggil fungsi seperti ini:
char* s = concat("derp", "herp");
// do things with s
free(s); // deallocate the string
Jika Anda memang terganggu oleh kinerja maka Anda ingin menghindari pemindaian berulang kali input buffer mencari null-terminator.
char* concat(const char *s1, const char *s2)
{
const size_t len1 = strlen(s1);
const size_t len2 = strlen(s2);
char *result = malloc(len1 + len2 + 1); // +1 for the null-terminator
// in real code you would check for errors in malloc here
memcpy(result, s1, len1);
memcpy(result + len1, s2, len2 + 1); // +1 to copy the null-terminator
return result;
}
Jika Anda berencana untuk melakukan banyak pekerjaan dengan string maka Anda mungkin lebih baik menggunakan bahasa yang berbeda yang memiliki dukungan kelas pertama untuk string.
return memcpy(result, s1, len1);
. Meskipun optimasi mikro atau setidaknya sedikit kode golf, peningkatan potensial seperti itu pada operasi string dasar dapat memiliki nilai mengingat penggunaannya yang tinggi.stpcpy
, yang mengembalikan pointer ke akhir string pertama:strcpy(stpcpy(result, s1), s2);
sumber
David Heffernan menjelaskan masalah ini dalam jawabannya, dan saya menulis kode yang diperbaiki. Lihat di bawah.
Fungsi generik
Kita dapat menulis fungsi variadic yang berguna untuk menggabungkan sejumlah string:
Pemakaian
Keluaran:
Membersihkan
Perhatikan bahwa Anda harus mengosongkan memori yang dialokasikan ketika menjadi tidak dibutuhkan untuk menghindari kebocoran memori:
sumber
int len
->size_t len
sebagaimanasize_t
jenis yang tepat untuk kode "ukuran". Juga// room for NULL
->// room for null character
NULL
menyiratkan pointer nol.Saya akan menganggap Anda membutuhkannya untuk hal-hal satu kali. Saya akan menganggap Anda seorang pengembang PC.
Gunakan Stack, Luke. Gunakan di mana-mana. Jangan gunakan malloc / gratis untuk alokasi kecil, pernah .
Jika 10 KB per string tidak akan cukup, tambahkan nol ke ukuran dan jangan repot-repot, - mereka akan melepaskan memori stack mereka di akhir cakupan.
sumber
snprintf(result, sizeof result, "%s %s %s", s1, s2, s3);
Anda harus menggunakan
strcat
, atau lebih baikstrncat
,. Google itu (kata kunci "menyatukan").sumber
strncat()
adalah fungsi yang sangat sulit untuk digunakan dengan benar. Dengan cepat, tanpa melihat manual, berapa lama Anda tentukanstrncat()
? Jika Anda mengatakan "panjang buffer", Anda baru saja menunjukkan maksud saya dengan baik. Ini memiliki antarmuka kontra-intuitif dan ketika Anda memiliki cukup data untuk menggunakannya dengan aman, Anda tidak perlu menggunakan fungsi di tempat pertama - ada alternatif lain, lebih cepat dan lebih efisien (sepertistrcpy()
ataumemmove()
) yang dapat digunakan sebagai gantinya. Cukup banyak pertanyaan 'apa yang harus saya gunakan',strncat()
bukan jawabannya.Anda tidak dapat menambahkan string literal seperti itu di C. Anda harus membuat buffer dengan ukuran string literal satu + string literal dua + byte untuk karakter terminasi nol dan menyalin literal yang sesuai ke buffer itu dan juga memastikan bahwa string itu diakhiri null . Atau Anda dapat menggunakan fungsi perpustakaan seperti
strcat
.sumber
Tanpa ekstensi GNU:
Atau dengan ekstensi GNU:
Lihat malloc , gratis dan asprintf untuk lebih jelasnya.
sumber
sumber
String Pengikat
Menggabungkan dua string dalam C dapat dilakukan dengan minimal 3 cara: -
1) Dengan menyalin string 2 ke akhir string 1
2) Dengan menyalin string 1 dan string 2 ke string 3
3) Dengan menggunakan fungsi strcat ()
sumber
Di C, Anda tidak benar-benar memiliki string, sebagai objek kelas satu yang umum. Anda harus mengelolanya sebagai array karakter, yang berarti Anda harus menentukan bagaimana Anda ingin mengatur array Anda. Salah satu caranya adalah dengan variabel normal, misal diletakkan di atas tumpukan. Cara lain adalah dengan mengalokasikannya secara dinamis
malloc
.Setelah Anda mengurutkannya, Anda dapat menyalin konten dari satu array ke array lain, untuk menggabungkan dua string menggunakan
strcpy
ataustrcat
.Karena itu, C memang memiliki konsep "string literal", yang merupakan string yang dikenal pada waktu kompilasi. Saat digunakan, mereka akan menjadi array karakter yang ditempatkan di memori read-only. Namun, dimungkinkan untuk menggabungkan dua string literal dengan menulisnya di samping satu sama lain, seperti pada
"foo" "bar"
, yang akan membuat string literal "foobar".sumber
menggunakan memcpy
sumber