Передача имени файла в функцию как массив символов в C - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь передать массив символов в функцию.Массив инициализируется вводом пользователя.Входные данные - это имя файла, которое будет открыто и прочитано в функции, чтобы определить, сколько целых чисел в файле соответствует целевому целевому значению пользователя (файл содержит только целые числа).Я получаю информацию от пользователя с помощью функции fgets ().Но когда я передаю массиву char с именем файла пользователя в функцию, я получаю NULL-указатель файла, хотя файл, который я пытался передать, находится в том же каталоге, что и мой исполняемый файл.

ТакжеЯ пытаюсь получить еще два ввода имени файла от пользователя для другой функции.Первый файл является исходным файлом, а второй файл является файлом назначения, в который будет скопировано содержимое первого файла.Я также использую fgets () для этого, но мой вывод, который запрашивает у пользователя второе имя файла, читается первым fgets (), который пытается прочитать первое имя файла.

Вот мой код:

#include <stdio.h>
#include <stdlib.h>

int countOccurrences (const char* filename, const int target);
int copyFile(const char* src_file, const char* dest_file);

main()
{
    printf("**********countOccurrences Test**********\n");
    char buffer[15];
    int userTarget;

    printf("Enter input file name: ");
    fgets(buffer, 15, stdin);

    printf("Enter target: ");
    scanf("%d", &userTarget);

    int count = countOccurrences(buffer, userTarget);
    printf("Occurrences of %d in \"%s\": %d\n", userTarget, buffer, count);

    printf("\n**********copyFile Test**********\n");
    char source[15];
    char destination[15];

    printf("Enter source file name: ");
    fgets(source, 15, stdin);

    printf("\nEnter destination file name: ");
    fgets(destination, 15, stdin);

    copyFile(source, destination);
    return 0;
}

int countOccurrences (const char* filename, const int target)
{
    FILE * numFile;

    numFile = fopen(filename, "r");

    if(numFile == NULL)
    {
        printf("Error opening file.\n");
        exit(0);
    }

    int currentNum;
    int targetCount = 0;

    while(!feof(numFile))
    {
        fscanf(numFile, "%d", &currentNum);
        if(currentNum == target)
        {
            targetCount++;
        }
    }

    fclose(numFile);

    return targetCount;
}

int copyFile(const char* src_file, const char* dest_file)
{
    FILE *source, *destination;
    char c;

    source = fopen(src_file, "r");
    destination = fopen(dest_file, "w");

    if((source == NULL) || (destination == NULL))
    {
        printf("Error opening file.\n");
        return 0;
    }

    while(!feof(source))
    {
        c = fgetc(source);
        fputc(c, destination);
    }

    fclose(source);
    fclose(destination);
    return 0;
}
...