gpt4 book ai didi

c++ - 返回类型为 char* 的数组的返回数据结构错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:43:38 24 4
gpt4 key购买 nike

我正在尝试从名为 urlTokener 的函数返回一个数据结构,其中一个成员是 char* 类型的数组,另一个是 int .当我在函数 urltokener 中打印数组的值时,我得到了正确的类型,但我看到在使用返回数据结构的主函数中,数组不包含正确的值因为输出不正确(与函数中的不同)。该函数似乎没有正确返回数据结构。你能检查一下我在下面的代码中做错了什么吗?

#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++ 做这件事,但是(给我这个任务的人)不允许我使用命名空间标准和库字符串。这就是代码类似于 C 的原因。由于这个限制,我很困惑是将它标记为 C 还是 C++。所以我在 c 和 c++ 中都标记了它。也许你可以自己决定。

最佳答案

你正在用 strtok 返回的指针填充数组,它在turn 是指向你的 urlArray 的指针,一个局部变量,它停止一旦你从函数返回就存在。

这是 C 还是 C++?您已经设置了两个标签,解决方案是不同的。在 C++ 中,显而易见的解决方案是替换 char*tokenDetailstd::string。在 C 中,它有点复杂。您已动态分配结构中的字符串(使用非标准但广泛使用的 strdup),并要求客户端释放他们。这里通常的解决方案是返回一个指向动态分配的 TokenDetail 和一个 freeTokenDetail 函数客户端需要调用返回的指针。这让您完全自由地进行分配和释放。 (这实际上,通常的解决方案是仅提供前向声明TokenDetail 给客户端,并提供他们拥有的功能调用以访问其元素。)

关于c++ - 返回类型为 char* 的数组的返回数据结构错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10348306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com