我需要将字符和整数合并。下面是我的代码:
int count = 100;
char* name = NULL;
sprintf((char *)name, "test_%d", count);
printf("%s\n", name);
没有任何输出。问题出在哪里?
你没有分配任何内存来接收 sprintf
的结果。你可以尝试:
int count = 100;
char name[20];
sprintf(name, "test_%d", count);
printf("%s\n", name);
int count = 100;
char *name = malloc(20);
sprintf(name, "test_%d", count);
printf("%s\n", name);
printf("test_%d\n", 100);
stringstream oss;
string str;
int count =100
oss << count;
str=oss.str();
cout << str;
你必须先为name
分配内存。在C中,像sprintf
这样的库函数不会为你做这件事。
实际上,我很惊讶你没有得到分段错误。
一个简单的解决方法是在32位int
的情况下使用char name[5+11+1]
。
snprintf
)往往会进行相当多的错误检查,而不像“轻型”函数(如memcpy
)。 - Dietrich Eppint
可以达到 11 位数字:-2147483648(在 32 位上) - Mooing Duck#include <iostream>
#include <string>
#include <sstream>
int count = 100;
std::stringstream ss;
ss << "Helloworld";
ss << " ";
ss << count ;
ss << std::endl;
std::string str = ss.str();
std::cout << str;
const char * mystring = str.c_str();
我使用boost::format
来实现这个。
#include <boost/format.hpp>
int count = 100;
std::string name = boost::str( boost::format("test_%1%") % count );
由于答案标记了C ++,因此这里介绍如何在该语言中完成:
C++11方法:std::string str = "Hello " + std::to_string(5);
使用Boost库方法:std::string str = "Hello " + boost::lexical_cast<std::string>(5);
name
分配一些存储空间。 - Paul R