我试图从名为urlTokener
的函数返回数据结构,其中数据结构中的一个成员是char*
类型的数组,另一个是int。当我在函数urltokener
中打印数组的值时,我得到了正确的类型,但是我发现在使用返回数据结构的主函数中,数组不包含正确的值,因为输出不正确(与函数中的不一样)。看来这个函数没有正确地返回数据结构。你能否在下面的代码中检查并说出我做错了什么?返回返回数据结构的错误,返回数组类型char *
#include <string.h>
#include <stdio.h>
struct tokenDetail
{
char* theArray[256];
int sizeOfArray;
};
tokenDetail urlTokener(const char *,char*);
void main()
{
// String to be splitted.
const char* url="/v1/AUTH_abb52a71-fc76-489b-b56b-732b66bf50b1/images?limit=1000&delimiter=/&format=xml" ;
tokenDetail newdetails;
newdetails=urlTokener(url,"?");
for (int i=0;i<newdetails.sizeOfArray;i++)
{
printf("This is in main where size is %d and the value %s\n",newdetails.sizeOfArray,newdetails.theArray[i]);
}
}
tokenDetail urlTokener(const char* urlLine,char* delimiter)
{
char urlArray[256];
strncpy(urlArray, urlLine, sizeof(urlArray));
tokenDetail details;
unsigned int index = 0;
details.theArray[index] = strtok(urlArray, delimiter);
while(details.theArray[index] != 0)
{
printf("This is in function %s\n",details.theArray[index]);
++index;
details.theArray[index] = strtok(0, delimiter);
}
for (int i=0;i<index;i++)
{
printf("This is in function 2nd time %s\n",details.theArray[i]);
}
details.sizeOfArray=index;
return details;
}
请注意:我这样做是为了C++,但我不能(通过谁给我这个任务的人)使用命名空间std和库字符串。这就是为什么代码与C类似的原因。由于这个限制,我很困惑是否将它标记为C或C++。所以我用c和C++标记了它。也许你可以自己决定。
难道说'urlArray'是一个堆栈变量? 'details.theArray'中的指针指向'urlArray'中的地址,从函数返回后无效。 – 2012-04-27 09:49:19
我还没有详细阅读,但大量使用'printf','strtok'和类似的语句暗示这是c,所以Luchian Grigore关于copy ctor和赋值运算符的回答是不相关的。你能否澄清你是否想要c或C++,并根据需要更改标签。 – BoBTFish 2012-04-27 09:49:36
我正在做一个更大的项目的测试,这个项目必须用C++完成,但是我不能使用命名空间Std和字符串库。我只能使用cstring或string.h和stdio.h。所以,这确实是C++,但我不得不使用类似于c的许多东西。我希望能消除你的困惑。 @ Bobtfish – 2012-04-27 09:56:24