urlTokener
データ構造の 1 つのメンバーが型の配列でchar*
あり、もう 1 つのメンバーが 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 ++のためにそれをやっていますが、名前空間stdとライブラリ文字列を使用することは(このタスクを私に与えた人によって)許可されていません。コードが C に似ているのはそのためです。この制限のため、C と C++ のどちらにタグ付けするか迷っています。そのため、c と c++ の両方でタグを付けました。自分で決めていいのかもしれません。