Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa SomeFunction().c_str() Mengembalikan Data Sampah Semasa str_copy = SomeFunction(); str_copy.c_str(); Berfungsi dengan Betul?

Mengapa SomeFunction().c_str() Mengembalikan Data Sampah Semasa str_copy = SomeFunction(); str_copy.c_str(); Berfungsi dengan Betul?

Patricia Arquette
Patricia Arquetteasal
2024-11-18 22:46:02920semak imbas

Why Does SomeFunction().c_str() Return Garbage Data While str_copy = SomeFunction(); str_copy.c_str(); Works Correctly?

Memahami Fungsi c_str() untuk Rentetan yang Dikembalikan oleh Fungsi

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn