Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将返回的ref封装到指向C_字符串的指针? 我有一些C++代码与x代码接口(如X11)。对于其中一个调用,它希望参数是指向字符串的指针的地址。调用被设置为获取一个已计数的字符串数组。在本例中,它只接受1个字符串(从主机名派生的winname)。目前的情况大致如下: char winname_[257]; // to hold Cstr returned by gethostname() string windowName{}; // holding string version (prefer strings, but need // Cstr's for C-compat in places)_C++_Function_Pointers - Fatal编程技术网

如何将返回的ref封装到指向C_字符串的指针? 我有一些C++代码与x代码接口(如X11)。对于其中一个调用,它希望参数是指向字符串的指针的地址。调用被设置为获取一个已计数的字符串数组。在本例中,它只接受1个字符串(从主机名派生的winname)。目前的情况大致如下: char winname_[257]; // to hold Cstr returned by gethostname() string windowName{}; // holding string version (prefer strings, but need // Cstr's for C-compat in places)

如何将返回的ref封装到指向C_字符串的指针? 我有一些C++代码与x代码接口(如X11)。对于其中一个调用,它希望参数是指向字符串的指针的地址。调用被设置为获取一个已计数的字符串数组。在本例中,它只接受1个字符串(从主机名派生的winname)。目前的情况大致如下: char winname_[257]; // to hold Cstr returned by gethostname() string windowName{}; // holding string version (prefer strings, but need // Cstr's for C-compat in places),c++,function,pointers,C++,Function,Pointers,具有以下功能: string XWin::WindowName(string name) { if (name.size()) windowName = name; if (!windowName.size()) { gethostname(winname_, sizeof(winname_)-1); windowName = getResourceOrUseDefault(string("title"), string(winname_)); strcpy(w

具有以下功能:

string XWin::WindowName(string name) { 
  if (name.size()) windowName = name;
  if (!windowName.size()) {
    gethostname(winname_, sizeof(winname_)-1);
    windowName = getResourceOrUseDefault(string("title"), string(winname_));
    strcpy(winname_, windowName.c_str());
  }
  return windowName;
}

inline char * winname() {if (!winname[0]) WindowName();return winname;}
要传递到Xfunc,我需要:

char * winname_p = winname_;
随着X函数的执行:

Xfunc(&winname_p, 1, et, al.)
我想做的是能够在函数中封装“winname\u p”引用,这样我就可以检查
winname\u p[0]!=0
,并让函数返回指针,但到目前为止,我一直在努力让函数返回 一个左值,这样我就可以得到:

Xfunc(&winname_ptr(),1, et,al.)...
我还没有弄清楚函数的返回语法,所以 它向winname\u p返回一个左值。我相信这对我来说很简单
很多,但在指针和函数方面,我似乎有一些障碍。

像很多事情一样,一旦你知道答案,这很容易。 将指针初始化为常量(表示不应更改):

然后包装器:

char * const &XWin::winname_ptr(void) {
    if (!winname_[0]) WindowName();
    return winname_p;
}
以及用法:

if (XStringListToTextProperty(
    const_cast<char **>(&winname_ptr()), 1, &title_) == 0) {...}
if(XStringListToTextProperty(
const_cast(&winname_ptr()),1,&title)==0{…}
如果不使用const会更简单,但这样看起来更准确

if (XStringListToTextProperty(
    const_cast<char **>(&winname_ptr()), 1, &title_) == 0) {...}