我必须连接字符与int。 这里是我的代码:连接字符与int
int count = 100;
char* name = NULL;
sprintf((char *)name, "test_%d", count);
printf("%s\n", name);
没有打印。有什么问题?
我必须连接字符与int。 这里是我的代码:连接字符与int
int count = 100;
char* name = NULL;
sprintf((char *)name, "test_%d", count);
printf("%s\n", name);
没有打印。有什么问题?
您必须首先为name
分配内存。在C中,库函数sprintf
不会为你做。
事实上,我很惊讶,你没有得到分段错误。
对于32位int
的情况,一个简单的解决方法是使用char name[5+11+1]
。
像“snprintf”这样的“重”库函数往往会进行大量的错误检查,而不是像“memcpy”这样的“轻量级”函数。 –
@Dietrich:也许你是对的,但它很奇怪。 [documentation](http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/)坚持认为_作为str传递的数组的大小应该足以包含整个格式化的string_并且不是特例空指针。 – Vlad
'int'可以达到11个数字:-2147483648(在32位) –
您没有分配任何内存,其中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);
在32位机器上,阵列不需要超过[17]。 –
是的。我必须比@MooingDuck更懒。 –
如果您程序C++使用sstream代替:
stringstream oss;
string str;
int count =100
oss << count;
str=oss.str();
cout << str;
您不检查流操作是否成功。 –
'stringstream << int'失败而没有抛出异常? (不是说你不应该检查) –
为此我使用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);
升压方式:std::string str = "Hello " + boost::lexical_cast<std::string>(5);
#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();
您需要为'name'分配一些存储空间 –
请指定您正在使用的编程语言。 C和C++在解决这个共同的问题上有很多不同的成语。 –
@Rob:假设他会接受使用任何一种语言的成语的答案是不安全的吗? –