문자 배열에 대한 포인터 인 char**
을 반환하는 함수가 있습니다. 여기서는 특정 정수 값 ind
에 대한 디렉토리 수의 파일을 읽습니다. 파일에서 값을 찾으면 디렉토리의 이름을 반환해야합니다. 나는 정적 할당을 사용하여 시도했지만 그 변수를 반환하면 정의되지 않은 동작이 발생하므로 도움이되지 않습니다. 필자의 경우에는 마지막 디렉토리 이름과 같은 모든 값을 얻습니다. 이것은 할당 된 시스템 스택에서 읽는 중이기 때문에 발생합니다. 그때 동적 할당을 사용하고 여기에 내가 작성한 코드입니다 :문자열 포인터를 반환하는 함수
int i = 0;
char **array;
array = get_strings(1);
for(i=0;i< found;i++)
printf("array[%d] = %s\n", i, array[i]);
내가 출력에 쓰레기 값을 얻을 :
//Global variable
int found = 0;
char** get_strings(int ind)
{
FILE *fp;
char filename[64];
char name[16];
//char *name;
char **array;
int i = 0, found = 0, l = 0;
int val = 0;
char **array = (char **)malloc(10 * sizeof(char *));
for(l = 0; l < 10; l++)
array[l] = (char *)malloc(16 * sizeof(char));
//name = (char *)malloc(16 * sizeof(char));
for(i=1;i<=10;i++)
{
snprintf(filename, sizeof(char) * 64, "/home/ben/dir%d/name", i);
fp = fopen(filename, "r");
if(fp == NULL)
{
perror("Error opening file");
}
fscanf(fp, "%d", &val);
fclose(fp);
//printf("value-%d is %d\n", i, val);
if (val != 0 && val == ind)
{
snprintf(name, sizeof(char) * 16, "dir%d", i);
printf("Dir %s is a has %d\n", name, ind);
strncpy(array[found],name, strlen(name));
found++;
}
}
return array;
}
과 내가 같은 주요 기능에서 호출하고 있습니다. 누군가 도울 수 있습니까?
'sizeof (char)'는 리던던트이며 항상 1로 평가됩니다. 또한 C에서'void * '로 변환하기 위해 타입 변환 할 필요가 없습니다. 이것은 함축적입니다. – Qix