我試圖從名爲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