C++ 将字符数组传递给CUDA内核

C++ 将字符数组传递给CUDA内核,c++,c,cuda,arrays,C++,C,Cuda,Arrays,我试图将一个包含10000个单词的字符数组从主函数中的txt文件中读取,并传递给CUDA内核函数 字从主机传输到设备,如下所示: char** wordList = new char*[10000]; for (int i=0;i<10000;i++) wordList[i] = new char[20]; (主要功能代码:) 有没有办法更容易地操纵它们?(我希望每个元素/位置有一个单词)我尝试了,但我无法在CUDA设备代码中使用它们 cuPrintf("%s\n", d_wordlis

我试图将一个包含10000个单词的字符数组从主函数中的txt文件中读取,并传递给CUDA内核函数

字从主机传输到设备,如下所示:

char** wordList = new char*[10000];
for (int i=0;i<10000;i++) wordList[i] = new char[20];
(主要功能代码:)

有没有办法更容易地操纵它们?(我希望每个元素/位置有一个单词)我尝试了
,但我无法在CUDA设备代码中使用它们

cuPrintf("%s\n", d_wordlist+(index*20));
应该有用吗?(前提是字符串以零结尾)

更新:

这一行:

char (*wordList)[text_length] = new char[10000][text_length];
我觉得很奇怪。通常,指向char的指针数组的分配方式如下:

char** wordList = new char*[10000];
for (int i=0;i<10000;i++) wordList[i] = new char[20];
char**wordList=newchar*[10000];
对于(int i=0;iwordList+(i*文本长度);

coutI试过了,但我得到了一个奇怪的字符序列。你在代码中复制字符串的方式,看起来它们不是以零结尾的(你为每个字符串分配20个符号,并执行memcpy I/o strcpy)。是否可以为每个字符串分配21个符号,并在每个字符串后添加“\0”?是的,但我不知道如何操作。如果终止符在每个字符串后,效果会更好。您的所有单词都是20个符号,还是您只是估计它们是这样的?字符串从主机到设备的传输是正确的,问题在于cuPrintf调用,I尝试输出在内核函数中声明的字符串,但它仅在声明为const char*时输出该字符串。因此,我将内核函数参数声明从全局void testKernel(char*d_wordList)修改为全局void testKernel(const char*d_wordList),现在可以工作了。非常感谢!
char** wordList = new char*[10000];
for (int i=0;i<10000;i++) wordList[i] = new char[20];
char *wordList = new char[10000*text_length];

for(int i=0; i<number_of_words; i++)
     {
         file>>wordList+(i*text_length);
         cout<<wordList+(i*text_length)<<endl;
     }