Rumah > Artikel > pembangunan bahagian belakang > Mengapa SomeFunction().c_str() Mengembalikan Data Sampah Semasa str_copy = SomeFunction(); str_copy.c_str(); Berfungsi dengan Betul?
Apabila fungsi anda SomeFunction() mengembalikan rentetan, ia mungkin kelihatan memanggil c_str() pada rentetan yang dikembalikan akan berjaya menukarnya kepada penunjuk aksara const. Walau bagaimanapun, dalam senario tertentu, anda mungkin menghadapi gelagat yang tidak dijangka.
Seperti yang ditunjukkan oleh kod yang disediakan, memanggil c_str() terus pada SomeFunction() menyebabkan penunjuk aksara const (charArray) merujuk data sampah, sambil menugaskan yang dikembalikan rentetan ke rentetan lain (str) dan kemudian memanggil c_str() padanya memberikan anda gelagat yang dimaksudkan.
Mengapa ini berlaku:
SomeFunction().c_str() menyediakan penunjuk kepada pembolehubah sementara (pembolehubah str di dalam SomeFunction()) yang wujud hanya dalam skop fungsi. Selepas fungsi kembali, pembolehubah itu dimusnahkan dan penunjuk (charArray) menjadi penunjuk berjuntai.
Sebaliknya, apabila anda menggunakan str_copy = SomeFunction(), salinan rentetan yang dikembalikan dibuat. Rentetan baharu ini wujud di luar fungsi dan apabila anda memanggil c_str() padanya, penuding ia mengembalikan mata kepada data yang sah, memastikan penukaran yang betul.
Atas ialah kandungan terperinci Mengapa SomeFunction().c_str() Mengembalikan Data Sampah Semasa str_copy = SomeFunction(); str_copy.c_str(); Berfungsi dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!