我想顯示正在使用的execve()函數作爲參數傳遞給另一個進程2的環境變量:無法通過第二個環境變量與execve的
MAIN.C:
int main(){
char USERNAME[10];
strcpy(USERNAME, "USERNAME=");
for (int i=1;i<10;i++){
strcpy(USERNAME+i, "1");
}
char PATH[169];
strcpy(PATH, "PATH=");
for (int i=5;i<169;i++){
strcpy(PATH+i, "A");
}
char * newargv[] = {"./get","", (char*)0};
char * newenviron[] = {PATH,USERNAME};
execve("./get", newargv, newenviron);
return 0;
}
GET .C:
int main()
{
const char* s = getenv("PATH");
printf("PATH :%s\n",s);
const char* s2 = getenv("USERNAME");
printf("USERNAME :%s\n",s2);
}
所以我編譯MAIN.C主和get.c獲得,並執行主,我得到這樣的輸出:
PATH :AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 用戶名:(空)
我不明白爲什麼用戶名爲空在這裏。
你可以嘗試做'的printf(」 <%s> \ n開始「,USERNAME);'在第一個程序的循環中。你會看到它不包含你的想法。或者更好的是,學習如何使用調試器。 – rodrigo
@WeatherVane咦? 'strcpy'是初始化它的東西。 –
@JosephSible mybad,但仍然是循環中的最後一個'strcpy'將溢出數組,因爲終止''\ 0''。 –