源码:
#include "vos_hash.h"
#define MAX_KEY_SIZE 26
#define MAX_NUM_SIZE 4
#define MAX_HASH_BUCKET_NUM (5 * (10^4) +1)
char ** getFolderNames(char ** names, int namesSize, int* returnSize);
int main(int argc, char argv[]) {
int i,nameSize;
char folderNames[4] = {"kaido","kaido(1)","kaido","kaido(1)"};
char** resultNames;
resultNames = getFolderNames(folderNames,4,&nameSize);
printf("resultNames:\n");
for(i=0;i<nameSize;i++) {
printf("%s\n", resultNames[i]);
}
for(i=0;i<nameSize;i++) {
free(resultNames[i]);
}
free(resultNames);
return 0;}
char ** getFolderNames(char ** names, int namesSize, int* returnSize) {
int i,AttempNum;
size_t strLen,fabricatedKeySize,numStrSize;
VosHash *createdFoldNames;
VosHashIterator it;
char fabricatedKey[MAX_KEY_SIZE];
char appendNumStr[MAX_NUM_SIZE];
char** returnedFoldNames;
*returnSize = namesSize;
returnedFoldNames = (char**) malloc(namesSize*sizeof(char*));
for(i=0;i<namesSize;i++) {
returnedFoldNames[i] = (char*) malloc(MAX_KEY_SIZE*sizeof(char));
}
createdFoldNames = VOS_HashCreate(MAX_HASH_BUCKET_NUM,MAX_KEY_SIZE,NULL,NULL,NULL,NULL);
/* Hash table creat failed */
if(createdFoldNames == NULL) {
return NULL;
}
for(i=0;i<namesSize;i++) {
strLen = strlen(names[i]);
it = VOS_HashFind(createdFoldNames,names[i],strLen);
/* the name not confict with the already created fold names add it into the list */
if (it == VOS_HashIterEnd(createdFoldNames)) {
VOS_HashInsert(createdFoldNames,names[i],strLen,0x00);
/* Copy the name into output result */
strcpy_s(returnedFoldNames[i],MAX_KEY_SIZE,names[i]);
}
/* name alread exist in the list */
else {
AttempNum = 1;
strcpy_s(fabricatedKey,MAX_KEY_SIZE,names[i]);
do {
itoa(AttempNum,appendNumStr,10);
fabricatedKey[strLen] = '(';
fabricatedKey[strLen+1] = 0x00;
strcat_s(fabricatedKey, MAX_KEY_SIZE, appendNumStr);
numStrSize = strlen(appendNumStr);
fabricatedKeySize = strLen + numStrSize + 1;
fabricatedKey[fabricatedKeySize++] = ')';
fabricatedKey[fabricatedKeySize] = 0x00;
it = VOS_HashFind(createdFoldNames,fabricatedKey,fabricatedKeySize);
AttempNum++;
} while(it != VOS_HashIterEnd(createdFoldNames));
VOS_HashInsert(createdFoldNames,fabricatedKey,fabricatedKeySize,0x00);
strcpy_s(returnedFoldNames[i],MAX_KEY_SIZE,fabricatedKey);
}
}
return returnedFoldNames;}
编译出错告警:
solution.c: In function ‘main’
Line 32: Char 23: warning: implicit declaration of function ‘getFolderNames’; did you mean ‘getdomainname’? [-Wimplicit-function-declaration]
char fabricatedKey[MAX_KEY_SIZE];
^~~~~~~~~~~~~
getdomainname
Line 32: Char 23: warning: initialization of ‘char **’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
/tmp/ccR6js2r.o:prog_joined.c:function main: error: undefined reference to 'getFolderNames'
collect2: error: ld returned 1 exit status