Bagikan melalui


_environ, _wenviron

Variabel _environ adalah penunjuk ke array pointer ke string multibyte-character yang merupakan lingkungan proses. Variabel global ini telah ditolak untuk versi fungsi yang lebih aman , dan _putenv_s,_wgetenv_s_wputenv_s, yang harus digunakan sebagai pengganti variabel global.getenv_s _environ dinyatakan dalam Stdlib.h.

Penting

API ini tidak dapat digunakan dalam aplikasi yang dijalankan di Windows Runtime. Untuk informasi selengkapnya, lihat Fungsi CRT yang tidak didukung di aplikasi Platform Windows Universal.

Sintaks

extern char **_environ;

Keterangan

Dalam program yang menggunakan main fungsi , _environ diinisialisasi pada startup program sesuai dengan pengaturan yang diambil dari lingkungan sistem operasi. Lingkungan terdiri dari satu atau beberapa entri formulir

ENVVARNAME =string

getenv_s dan putenv_s gunakan _environ variabel untuk mengakses dan memodifikasi tabel lingkungan. Ketika _putenv dipanggil untuk menambahkan atau menghapus pengaturan lingkungan, tabel lingkungan berubah ukuran. Lokasinya dalam memori juga dapat berubah, tergantung pada persyaratan memori program. Nilai _environ disesuaikan secara otomatis.

Variabel _wenviron , dideklarasikan dalam Stdlib.h sebagai:

extern wchar_t **_wenviron;

adalah versi karakter luas dari _environ. Dalam program yang menggunakan wmain fungsi , _wenviron diinisialisasi pada startup program sesuai dengan pengaturan yang diambil dari lingkungan sistem operasi.

Dalam program yang menggunakan main, _wenviron awalnya NULL karena lingkungan terdiri dari string karakter multibyte. Pada panggilan pertama ke _wgetenv atau _wputenv, lingkungan string karakter lebar yang sesuai dibuat dan ditujukkan ke oleh _wenviron.

Demikian pula, dalam program yang menggunakan wmain, _environ awalnya NULL karena lingkungan terdiri dari string karakter luas. Pada panggilan pertama ke _getenv atau _putenv, lingkungan string karakter multibyte yang sesuai dibuat dan ditujukkan ke oleh _environ.

Ketika dua salinan lingkungan (MBCS dan Unicode) ada secara bersamaan dalam suatu program, sistem run-time harus mempertahankan kedua salinan, menghasilkan waktu eksekusi yang lebih lambat. Misalnya, setiap kali Anda memanggil _putenv, panggilan ke _wputenv juga dijalankan secara otomatis, sehingga kedua string lingkungan sesuai.

Perhatian

Dalam instans yang jarang terjadi, ketika sistem run-time mempertahankan versi Unicode dan versi multibyte lingkungan, kedua versi lingkungan ini mungkin tidak sesuai persis. Ini karena, meskipun string karakter multibyte unik memetakan ke string Unicode yang unik, pemetaan dari string Unicode unik ke string karakter multibyte belum tentu unik. Oleh karena itu, dua string Unicode yang berbeda mungkin memetakan ke string multibyte yang sama.

Polling _environ dalam konteks Unicode tidak ada artinya ketika /MD atau /MDd linkage digunakan. Untuk DLL CRT, jenis (lebar atau multibyte) program tidak diketahui. Hanya jenis multibyte yang dibuat karena itu adalah skenario yang paling mungkin.

Kode pseudo berikut menggambarkan bagaimana pembuatan ini dapat terjadi.

int i, j;
i = _wputenv( "env_var_x=string1" );  // results in the implicit call:
                                      // putenv ("env_var_z=string1")
j = _wputenv( "env_var_y=string2" );  // also results in implicit call:
                                      // putenv("env_var_z=string2")

Dalam notasi yang digunakan untuk contoh ini, string karakter bukan literal string C; sebaliknya, mereka adalah tempat penampung yang mewakili literal string lingkungan Unicode dalam _wputenv string lingkungan panggilan dan multibyte dalam putenv panggilan. Tempat penampung karakter 'x' dan 'y' dalam dua string lingkungan Unicode yang berbeda tidak memetakan secara unik ke karakter di MBCS saat ini. Sebaliknya, keduanya memetakan ke beberapa karakter MBCS 'z' yang merupakan hasil default dari upaya untuk mengonversi string.

Dengan demikian, di lingkungan multibyte, nilai "env_var_z" setelah panggilan putenv implisit pertama menjadi "string1", tetapi nilai ini akan ditimpa pada panggilan implisit kedua ke putenv, ketika nilai "env_var_z" diatur ke "string2". Oleh karena itu, lingkungan Unicode (dalam _wenviron) dan lingkungan multibyte (dalam _environ) akan berbeda mengikuti serangkaian panggilan ini.

Baca juga

Variabel global
getenv, _wgetenv
getenv_s, _wgetenv_s
_putenv, _wputenv
_putenv_s, _wputenv_s