【发布时间】:2021-12-31 08:02:19
【问题描述】:
我遇到了在程序中将任意地址注册为char* 的场景。为了简化问题,假设在将单词与句子分离后,我需要将每个单词作为char* 传递给 dll 库以进行进一步操作。
分析“Hello World”的静态方法如下:
...
#include third_party_lib;
char* w1 = "Hello".c_str();
char* w2 = "World".c_str();
third_party_function(w1);
third_party_function(w2);
显然w1 和w2 的命名是静态的,这意味着我必须手动编写它们的名称。不适合将任意数量的char* 变量传递给third_party_function。
我听说不能使用通配符命名变量,例如w_n,另一种方法是使用char* 的向量或数组。
我想出了这个:
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int main()
{
char* w[100];
string a = "Hello";
a.copy(w[0], a.size(), 0);
cout << "w[0]: "<<w[0] <<endl;
//third_party_function(w[0]);
a = "World";
cout << "a after: " <<a <<endl;
a.copy(w[1], a.size(), 0);
cout << "w[1]: "<< w[1] <<endl;
//third_party_function(w[1]);
}
注意我重新使用了变量a,因为如果在循环中就会出现这种情况。
但是,第三个输出不是应该的,打印输出只有两行:
w[0]: Hello
a after: World
当然,这是两次失败的尝试。但是如何通过第三方库将任意数量的char* 变量传递给函数呢?
【问题讨论】:
-
ch[0]是一个指针,但你永远不会让它指向任何地方。因此使用无效。 -
而不是
char* ch[100]为什么没有 std::string 的向量?然后,您可以将 .data() 传递给您调用的 dll 函数。我看不到 char* ch[100] 有什么附加价值 -
@AndersK 这 3 行在 main 中不起作用:
vector<char*> ch; string a = "Hello"; ch.push_back(a.data()); -
@GeorgeY 看来你有 XY 问题。此外,完全不清楚您到底想要什么以及为什么使用
char*。其次,由于使用了未初始化的变量,您的程序具有未定义的行为。在编写任何类型的程序之前,您应该参考一些好书,而不是做任意事情并期望它会导致您想要的输出(尤其是在C++)。 -
@Someprogrammerdude:哎呀,对,对不起。