如何使用c中的占位符(%s)创建字符串

时间:2016-04-22 04:44:33

标签: c

通常我们可以在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中如何创建这种类型的字符串?请帮帮我。

并向我致谢。

3 个答案:

答案 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);