我是c ++编程的新手我必须使用以下参数调用函数。 int Start(int argc,char ** argv)。
当我尝试用下面的代码调用上面的函数时,我得到运行时异常。有人可以帮助我解决上述问题。
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);
答案 0 :(得分:0)
您似乎没有为数组分配任何内存,只需要一个NULL指针
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;
}
答案 1 :(得分:0)
两件事:
char **Argument1=NULL;
这是指向指针的指针,你需要在内存中分配一些空间。
*Argument1 = new char[10];
for(i=0, i<10; ++i) Argument[i] = new char();
不要忘记以相同的样式删除。
答案 2 :(得分:0)
您要做的第一件事就是找到您将拥有的字符串数量。这很简单:
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++;
}
}
在上面的代码中,我假设文件名中至少有一个单词(即它不是一个空字符串)。 现在,您可以为Argument1分配内存。
Argument1 = new char *[numwords];
之后你有两个选择:
可以这样做:
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;
}
}
}
上面的代码没有优化,我只是想让它尽可能简单易懂。 我也没有测试它,但它应该工作。我做出的假设:
每当我引用一个字符串时,我的意思是一个char数组:P
我在你的代码中发现了一些错误:
希望我帮助过!
如果我的代码中有错误,请告诉我并解决它。