我有一些代码看起来是这样的:修改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