Visual c++ 在visualc+中将一维指针数组(char)转换为二维指针数组(char)+;。 我是C++编程新手,我必须调用一个函数,并带有下列参数。 整数开始(整数argc,字符**argv)
当我尝试用下面的代码调用上面的函数时,会出现运行时异常。有人能帮我解决上述问题吗Visual c++ 在visualc+中将一维指针数组(char)转换为二维指针数组(char)+;。 我是C++编程新手,我必须调用一个函数,并带有下列参数。 整数开始(整数argc,字符**argv),visual-c++,Visual C++,当我尝试用下面的代码调用上面的函数时,会出现运行时异常。有人能帮我解决上述问题吗 char * filename=NULL; char **Argument1=NULL; int Argument=0; int j = 0; int k = 0; int i=0; int Arg() { filename = "Globuss -dc bird.jpg\0"; for(i=0;filename[i]!=NULL;i++) { if ((const char *)filename[i]
char * filename=NULL;
char **Argument1=NULL;
int Argument=0;
int j = 0;
int k = 0;
int i=0;
int Arg()
{
filename = "Globuss -dc bird.jpg\0";
for(i=0;filename[i]!=NULL;i++)
{
if ((const char *)filename[i]!=" ")
{
Argument1[j][k++] = NULL; // Here I get An unhandled
// exception of type
//'System.NullReferenceException'
// occurred
j++;
k=0;
}
else
{
(const char )Argument1[j][k] = filename [j]; // Here I also i get exception
k++;
Argument++;
}
}
Argument ++;
return 0;
}
Start (Argument,Argument1);
您似乎没有为数组分配任何内存,您只有一个空指针
char * filename=NULL;
char **Argument1=NULL;
int Argument=0;
int j = 0;
int k = 0;
int i=0;
int Arg()
{
filename = "Globuss -dc bird.jpg\0";
//I dont' know why you have 2D here, you are going to need to allocate
//sizes for both parts of the 2D array
**Argument1 = new char *[TotalFileNames];
for(int x = 0; x < TotalFileNames; x++)
Argument1[x] = new char[SIZE_OF_WHAT_YOU_NEED];
for(i=0;filename[i]!=NULL;i++)
{
if ((const char *)filename[i]!=" ")
{
Argument1[j][k++] = NULL; // Here I get An unhandled
// exception of type
//'System.NullReferenceException'
// occurred
j++;
k=0;
}
else
{
(const char )Argument1[j][k] = filename [j]; // Here I also i get exception
k++;
Argument++;
}
}
Argument ++;
return 0;
}
char*filename=NULL;
char**Argument1=NULL;
int参数=0;
int j=0;
int k=0;
int i=0;
int Arg()
{
filename=“Globuss-dc bird.jpg\0”;
//我不知道为什么这里有2D,你需要分配
//二维阵列两部分的尺寸
**Argument1=新字符*[TotalFileName];
对于(int x=0;x
两件事:
char **Argument1=NULL;
这是指针对指针,您需要在内存中为它分配一些空间
*Argument1 = new char[10];
for(i=0, i<10; ++i) Argument[i] = new char();
*Argument1=新字符[10];
对于(i=0,i您必须做的第一件事是找到您将拥有的字符串的数量。这很容易通过以下方式完成:
int len = strlen(filename);
int numwords = 1;
for(i = 0; i < len; i++) {
if(filename[i] == ' ') {
numwords++;
// eating up all spaces to not count following ' '
// dont checking if i exceeds len, because it will auto-stop at '\0'
while(filename[i] == ' ') i++;
}
}
之后,您有两个选择:
使用strtok()
实现拆分字符串的函数
可以这样做:
int i,cur,last;
for(i = last = cur = 0; cur < len; cur++) {
while(filename[last] == ' ') { // last should never be ' '
last++;
}
if(filename[cur] == ' ') {
if(last < cur) {
Argument1[i] = new char[cur-last+1]; // +1 for string termination '\0'
strncpy(Argument1[i], &filename[last], cur-last);
last = cur;
}
}
}
inti,cur,last;
对于(i=last=cur=0;cur
上面的代码没有经过优化,我只是尽量让它易于理解。
我也没有测试它,但它应该可以工作。我做了以下假设:
字符串以null结尾
字符串中至少有一个单词
另外,每当我指的是一个字符串时,我指的是一个字符数组:p
我注意到您的代码中有一些错误:
在c/c++中,是指向包含空格的常量字符数组的指针。
如果将它与另一个“”进行比较,则会将指针与它们进行比较。它们可能(也可能会)不同。为此,请使用strcmp()
<> LI>你应该学习如何分配动态内存。在C中,你可以用Maloc,C++中的MALOC和新的(更好地使用新而不是MALOC)。
希望我能帮忙
PS如果我的代码中有错误,请告诉我,我会修复它。这是假设你想要一个2D数组,但我认为你不需要它。如果你想存储多个文件名,比如[0][“文件一”][1][“文件二”][2][“文件三”],你想要一个2D数组[F][i][L][E][O][N][E]嗨,Craig,谢谢你的宝贵建议。我尝试了你的建议,但也遇到了同样的例外。我的主要动机是调用Start(参数,**参数);Function。你知道二维数组是如何工作的吗?我不是说听起来不敬,但你似乎想从代码中得到的是[0][f][1][I][2][l][3][e],作为一个二维数组,您正在分配两个较大的空间。如果您希望它是[0][filename1][1][filename2],只需从循环中删除j++并在每次添加其他文件名时递增它
int i,cur,last;
for(i = last = cur = 0; cur < len; cur++) {
while(filename[last] == ' ') { // last should never be ' '
last++;
}
if(filename[cur] == ' ') {
if(last < cur) {
Argument1[i] = new char[cur-last+1]; // +1 for string termination '\0'
strncpy(Argument1[i], &filename[last], cur-last);
last = cur;
}
}
}