我有一些代碼看起來是這樣的:修改C字符串
typedef struct
{
char mode; //e = encrypt, d = decrypt
char* infile; //name of infile
char* outfile; //name of outfile
char* password; //password string
} cipher_t;
int check_files(cipher_t *data)
{
char temp_path[] = "temp-XXXXX";
if(/** infile == stdin *//)
{
mkstemp(temp_path);
*data.infile = temp_path;
}
//do stuff and return
}
基本上,我想要做的是檢測用戶是否從stdin
要輸入數據,如果這樣做一個臨時文件,我可以做東西。
這裏的問題是,當我如上所示設置我的infile路徑時,該數據在退出函數時不會保留,因爲它是局部變量。所以當我退出函數時,臨時文件路徑在結構中丟失。除了物理複製字符串之外,還有什麼可以保留值的嗎?
爲什麼你不想使用'strcpy()'? – user1336087 2014-09-28 06:02:59
您尚未爲您正在使用的指針分配任何空間,即 即cipher_t * data和char * infile。除非你使用malloc分配給它們一些空間,否則它們都是指針和 ,它們將繼續給出分段錯誤,因爲它們沒有任何有效的地址指向。 – 2014-09-28 06:16:46
*「除了物理複製字符串之外,還有什麼可以保留該值的嗎?」*不,在堆棧上創建的字符串無法保存,而無需將字符串複製到堆棧外存儲。所以你唯一的選擇就是不要把字符串放在堆棧中,例如將'infile'的聲明更改爲'char infile [32]',以便字符串的存儲位於結構本身中。 – user3386109 2014-09-28 07:01:57