У меня есть метод, который принимает список файлов и получает данные о файлах. Формат этих файлов возвращается в виде двух одномерных массивов. Я хочу объединить их в один 2D-массив.
Файлы возвращаются только с массивом типов и массивом данных.
Вот метод, о котором идет речь. Я успешно извлекаю нужные данные из файлов в массив 1D, но когда я пытаюсь добавить их в массив 2D, он запускается (но выдает предупреждение, что char * и char * [] [] aren ' т эквивалент).
char *ParseFiles(char *listOfFiles[32])
{
char *allFileData;
char *tmpArray[32][32];
allFileData = tmpArray;
for(int i = 0; i < listOfFiles[i]; i++)
{
int j = 0;
// Get the File Type
char *currentFileType = GetFileType(listOfFiles[i], strlen(listOfFiles[i]));
if(currentFileType)
{
// Warning char * and char *[][] are not equivalent.
tmpArray[i][j] = currentFileType;
printf("File %d is %s\n", i, currentFileType);
//printf("File %d is %s\n", i, &tmpArray[i][j]);
//free(currentFileType);
}
//Get all File Data
// Warning char * and char *[][] are not equivalent.
char *currentFileData = GetFileData(listOfFiles[i]);
j = j + 1;
if(currentFileData)
{
tmpArray[i][j] = currentFileData;
printf("File Data:\n%s\n", currentFileData);
//free(currentFileType);
}
}
return allFileData;
}
Когда я пытаюсь вывести значения tmpArray[][]
в закомментированных утверждениях printf, я получаю неожиданные символы (неожиданные для того, кто совершает ошибку) ?]p
Проблема связана с тем, что два массива символов не имеют одинаковый тип, или потому, что я пытаюсь вставить одномерный массив в многомерный массив неправильно?
Точное предупреждение, которое я получаю: warning: incompatible pointer types assigning to 'char*' from 'char *[32][32]'
Ниже приведены два других моих метода и мой основной:
char *GetFileType(char *filePath, int size)
{
char *ret = malloc(size);
char currentLine[100];
FILE *file = fopen(filePath, "r");
while(fgets(currentLine, sizeof(currentLine), file) != NULL)
{
if(strstr(currentLine, "test"))
{
ret = "test";
}
else if(strstr(currentLine, "production"))
{
ret = "production";
}
}
if(!ret)
{
return NULL;
}
return ret;
}
char *GetFileData(char *filePath)
{
char *buffer = NULL;
size_t size = 0;
FILE *file = fopen(filePath, "r");
// Get the buffer size
fseek(file, 0, SEEK_END);
size = ftell(file);
// Reset the position of the stream
rewind(file);
buffer = malloc((size + 1) * sizeof(*buffer));
// Read the entire file into the buffer
fread(buffer, size, 1, file);
buffer[size] = '\0';
return buffer;
}
int main (void)
{
char *listOfFiles[32] = {"file1.txt", "file2.txt", "file3.txt"};
ParseFiles(listOfFiles);
printf("Press ENTER key to Continue");
getchar();
return 0;
}