通常我们可以在printf(),fprintf()函数中使用占位符%s。
我想使用占位符来使用%s创建字符串。像那样
char fName[200] = "C:\\Users\\%s\\Desktop\\Result", getenv("USERNAME");
// getenv() function will return current user name
// The fName will be "C:\\Users\\Zobayer\\Desktop\\Result"
我知道在c ++中我们可以通过stringstream创建它
std::stringstream ss;
ss << "C:\\Users\\" << getenv("USERNAME") << "\\Desktop\\Result";
但是在C中如何创建这种类型的字符串?请帮帮我。
并向我致谢。
答案 0 :(得分:2)
如果可以,请使用snprintf
,而不是sprintf
。它可以防止可能的缓冲区溢出。
char fName[200];
snprintf(fName, sizeof(fName), "C:\\Users\\%s\\Desktop\\Result", getenv("USERNAME"));
答案 1 :(得分:0)
尝试使用sprintf。它会打印成一个字符串。
char fName[200];
sprintf(fName, "C:\\Users\\%s\\Desktop\\Result", getenv("USERNAME"));
答案 2 :(得分:0)
在C中,代码需要处理结果字符串的内存分配。许多方法。
// char fName[200] = "C:\\Users\\%s\\Desktop\\Result", getenv("USERNAME");
char *username = getenv("USERNAME");
// Insure a valid name was found
if (username == NULL) {
Handle_NoUsername();
}
// Allocate enough space for the answer
const char *format = "C:\\Users\\%s\\Desktop\\Result";
size_t size = strlen(format) + strlen(username) + 1; // slight over-sized
char *fName = malloc(size);
if (fname == NULL) {
Handle_OOM(); // Out-of-memory
}
int n = snprintf(fName, size, format, username);
if (n < 0 || n >= size) {
Handle_UnusualPrintProblem();
}
// use fName
free(fName);