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

如何在c中使用占位符(%s)创建字符串,c,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" 我知

通常,我们可以在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++中可以用StrugSuth/P>来创建它。
std::stringstream ss;
ss << "C:\\Users\\" << getenv("USERNAME") << "\\Desktop\\Result";
std::stringstream-ss;
ss试试看。它会打印成字符串

char fName[200];
sprintf(fName, "C:\\Users\\%s\\Desktop\\Result", getenv("USERNAME"));
试试看。它会打印成字符串

char fName[200];
sprintf(fName, "C:\\Users\\%s\\Desktop\\Result", getenv("USERNAME"));
如果可以,请使用,而不是
sprintf
。这将防止可能的缓冲区溢出

char fName[200];
snprintf(fName, sizeof(fName), "C:\\Users\\%s\\Desktop\\Result", getenv("USERNAME"));
如果可以,请使用,而不是
sprintf
。这将防止可能的缓冲区溢出

char fName[200];
snprintf(fName, sizeof(fName), "C:\\Users\\%s\\Desktop\\Result", getenv("USERNAME"));

在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);
//char fName[200]=“C:\\Users\\%s\\Desktop\\Result”,getenv(“用户名”);
char*username=getenv(“用户名”);
//确保找到有效的名称
如果(用户名==NULL){
Handle_nouser name();
} 
//为答案分配足够的空间
const char*format=“C:\\Users\\%s\\Desktop\\Result”;
size\u t size=strlen(格式)+strlen(用户名)+1;//稍微过大
char*fName=malloc(大小);
如果(fname==NULL){
Handle_OOM();//内存不足
}
int n=snprintf(fName、大小、格式、用户名);
如果(n<0 | | n>=大小){
处理_异常打印问题();
}
//使用fName
免费(fName);

在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);
//char fName[200]=“C:\\Users\\%s\\Desktop\\Result”,getenv(“用户名”);
char*username=getenv(“用户名”);
//确保找到有效的名称
如果(用户名==NULL){
Handle_nouser name();
} 
//为答案分配足够的空间
const char*format=“C:\\Users\\%s\\Desktop\\Result”;
size\u t size=strlen(格式)+strlen(用户名)+1;//稍微过大
char*fName=malloc(大小);
如果(fname==NULL){
Handle_OOM();//内存不足
}
int n=snprintf(fName、大小、格式、用户名);
如果(n<0 | | n>=大小){
处理_异常打印问题();
}
//使用fName
免费(fName);

字符fName[200];snprintf(fName,sizeof(fName),“C:\\Users\\%s\\Desktop\\Result”,getenv(“用户名”)您需要使用。@BLUEPIXY,除非我们能找到重复的,否则该评论应该升级为答案。@RSahu此站点甚至需要基本教程吗?@BLUEPIXY,创建教程而不是此站点的章程。
char fName[200];snprintf(fName,sizeof(fName),“C:\\Users\\%s\\Desktop\\Result”,getenv(“用户名”)你需要使用。@BLUEPIXY,除非我们能找到重复的,否则该评论应该被提升为答案。@RSahu这个网站甚至需要一个基本教程吗?@BLUEPIXY,创建教程不是这个网站的章程。最好使用
snprintf
,而不是
sprintf
。这可能会溢出。@Leandros使用
snprintf()
,而不检查其结果并不比
sprintf()
-只是用一组问题换另一组问题。健壮的代码将检查
getenv()
的结果,并根据需要调整大小
fName[]
。最好使用
snprintf
,而不是
sprintf
。这可能会溢出。@Leandros使用
snprintf()
,而不检查其结果并不比
sprintf()
-只是用一组问题换另一组问题。健壮的代码将根据需要检查
getenv()
的结果和大小
fName[]