我知道的唯一方法是:
#include <sstream>
#include <string.h>
using namespace std;
int main() {
int number=33;
stringstream strs;
strs << number;
string temp_str = strs.str();
char* char_type = (char*) temp_str.c_str();
}
Run Code Online (Sandbox Code Playgroud)
但是有没有更少打字的方法?
在我的项目中有一个方法只返回一个const char*,而我需要一个char*字符串,因为API不接受const char*.
知道怎么转换const char*到char*?
似乎strtol()并且strtod()有效地允许(并强制)你在字符串中抛弃constness:
#include <stdlib.h>
#include <stdio.h>
int main() {
const char *foo = "Hello, world!";
char *bar;
strtol(foo, &bar, 10); // or strtod(foo, &bar);
printf("%d\n", foo == bar); // prints "1"! they're equal
*bar = 'X'; // segmentation fault
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面,我自己没有演出.然而,strtol()基本上把我const char *变成了一个char *对我来说,没有任何警告或任何东西.(事实上,它不会让你输入bar的const char *,所以迫使类型的不安全的变化.)是不是真的很危险?
我见过人们使用2种方法来声明和定义char *.
Medhod 1:头文件如下
extern const char* COUNTRY_NAME_USA = "USA";
Run Code Online (Sandbox Code Playgroud)
Medhod 2:
头文件具有以下声明:
extern const char* COUNTRY_NAME_USA;
Run Code Online (Sandbox Code Playgroud)
cpp文件具有以下定义:
extern const char* COUNTRY_NAME_USA = "USA";
Run Code Online (Sandbox Code Playgroud)
const char * const var"和" const char * var" 之间的区别.如果在上面的方法中,如果const char * const var在方法1中声明和定义标题中的" "是否有意义?我正在使用一些C++代码扩展Python.
我使用的其中一个功能有以下签名:
int PyArg_ParseTupleAndKeywords(PyObject *arg, PyObject *kwdict,
char *format, char **kwlist, ...);
Run Code Online (Sandbox Code Playgroud)
(链接:http://docs.python.org/release/1.5.2p2/ext/parseTupleAndKeywords.html)
感兴趣的参数是kwlist.在上面的链接中,给出了如何使用此功能的示例.在示例中,kwlist看起来像:
static char *kwlist[] = {"voltage", "state", "action", "type", NULL};
Run Code Online (Sandbox Code Playgroud)
当我使用g ++编译它时,我收到警告:
warning: deprecated conversion from string constant to ‘char*’
Run Code Online (Sandbox Code Playgroud)
所以,我可以将静态char*更改为静态const char*.不幸的是,我无法更改Python代码.因此,通过此更改,我得到了不同的编译错误(无法将char**转换为const char**).根据我在这里阅读的内容,我可以打开编译器标志来忽略警告,或者我可以将kwlist定义中的每个常量字符串转换为char*.目前,我正在做后者.有什么其他解决方案?
对不起,如果之前已经问过这个问题.我是新来的.
这个问题直接与使用char作为stdmap中的键有关.
我理解传入的比较函数的作用以及为什么char *类型作为键需要它.但是,我不确定更新实际上是如何工作的.
我很好奇你要更新密钥的情况.如何std::map知道如何比较之间的相等性const char *,cmp_str只告诉map将键插入到树中的顺序.
我已经对stl_tree.h代码进行了一些挖掘(从这里开始),但是找不到多少.我唯一的猜测是它做了直接记忆比较.
我对underling stl_tree类如何处理这种情况感兴趣,或者它是否一直没有正确处理它,什么边缘情况会破坏?
码
#include <map>
#include <iostream>
#include <cstring>
struct cmp_str
{
bool operator()(char const *a, char const *b)
{
return std::strcmp(a, b) < 0;
}
};
int main ( int argc, char ** argv )
{
std::map<const char*, int, cmp_str> map;
map["aa"] = 1;
map["ca"] = 2;
map["ea"] = 3;
map["ba"] = 4;
map["ba"] = 5;
map["bb"] …Run Code Online (Sandbox Code Playgroud) 我陷入了printf问题.如果我能在这里得到一些帮助,我将不胜感激:在下面的代码中,我可以看到字体系列在第一个printf()中被正确替换,但是如果我将它设置为变量,我只得到一个空字符串.如何将其放入变量并具有正确的值?我只是不想输入'font.family().family().string().utf8().data()'到处都是?
我用同样的方法做了这个:
void myMethod() {
const char* fontFamily = font.family().family().string().utf8().data();
// get displayed correctly
printf ("drawText1 %s \n", font.family().family().string().utf8().data());
// get an empty string
printf ("drawText2 %s \n", fontFamily);
}
Run Code Online (Sandbox Code Playgroud)
而'data()'的签名是
class CString {
public:
CString() { }
CString(const char*);
CString(const char*, unsigned length);
CString(CStringBuffer* buffer) : m_buffer(buffer) { }
static CString newUninitialized(size_t length, char*& characterBuffer);
const char* data() const;
//...
}
Run Code Online (Sandbox Code Playgroud)
utf8()的签名是
class String {
CString utf8() const;
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我是c ++的新手,并且缺乏理解为什么这段代码运行良好:
string GetString(string promt)
{
cout << promt << ": ";
string temp;
getline(cin, temp);
return temp;
}
int main()
{
string firstName = GetString("Enter your first name");
string lastName = GetString("Enter your last name");
cout<< "Your Name is: " << firstName << " " << lastName;
cin.ignore();
cin.get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
像"bla"这样的字符串文字是类型const char*.至少auto i ="bla"; 表示我是Type"const char*".为什么可以将它传递给GetString-Function,因为函数需要一个字符串而不是一个const char*?
我正在尝试用C++编写一个程序,它创建一些文件(.txt)并将结果写入其中.问题是这些文件的数量在开始时没有固定,只出现在程序结束附近.我想将这些文件命名为"file_1.txt","file_2.txt",...,"file_n.txt",其中n是整数.
我不能使用连接,因为文件名需要类型"const char*",我没有找到任何方法将"字符串"转换为此类型.我没有通过互联网找到任何答案,如果你帮助我,我会非常高兴.
我想搜索可能存在的任何驱动器,如C文件:\ d:\等使用GetLogicalDriveStrings,我可以能够得到驱动器的列表,但是当我添加任何额外的输出,我得到一个null在输出提示.这是我的代码:
#include "StdAfx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
// Buffer length
DWORD mydrives = 100;
// Buffer for drive string storage
char lpBuffer[100];
const char *extFile = "text.ext";
// You may want to try the wmain() version
int main(void)
{
DWORD test;
int i;
test = GetLogicalDriveStrings(mydrives, (LPWSTR)lpBuffer);
if(test != 0)
{
printf("GetLogicalDriveStrings() return value: %d, Error (if any): %d \n", test, GetLastError());
printf("The logical drives of this machine are:\n");
// Check up to …Run Code Online (Sandbox Code Playgroud)