1487. 保证文件名唯一 编译问题-找不到代码模板中定义的函数,请问有人知道原因吗
1875
发布于 未知归属地

源码:
#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

评论 (1)