Получить длину массива char с нулевыми элементами в C - PullRequest
0 голосов
/ 30 апреля 2020

В настоящее время я делаю проект, который использует char массивы с нулевыми элементами. Я хочу иметь возможность получить длину массива, в смысле количества элементов, которые не являются нулевыми. Это казалось достаточно тривиальным, и я сделал эту функцию:

int getWordLen(char word[]) {
    int count = 0;
    for (int i = 0; i < 512; i++) {
        if (word[i] != '\0') {
            count++;
        }
    }
    printf("%d ", count);
    return count;
}

Однако каждый массив символов возвращает длину 188. Любая помощь будет принята.

Это функция, которую я вызывал от:

void redact(Words * redactWords, char fileName[]) {
    FILE * file = fopen(fileName, "r");
    FILE * outputFile = fopen("outputFile.txt", "w+");

    char word[512];
    int i = 0;
    char c;

    while (c != EOF) {
        c = getc(file);

        if ((c > 96) && (c < 123)) {
            word[i] = c;
            i++;
            continue;
        }
        else if ((c > 64) && (c < 91)) {
            word[i] = c + 32;
            i++;
            continue;
        }
        i = 0;

        if (isWordRedactWord(redactWords, word)) {
            //write stars to file
            char starStr[512];
            for (int i = 0; i < getWordLen(word); i++) {
                starStr[i] = '*';
            }
            fputs(starStr, outputFile);
        }
        else {
            //write word to file
            fputs(word, outputFile);
        }

        strcpy(word, emptyWord(word));
    }

    fclose(file);
    fclose(outputFile);
}

1 Ответ

0 голосов
/ 30 апреля 2020

В начальный момент я бы использовал только while(!EOF). Кроме того, я полагаю, что вы используете гораздо больше ресурсов, чем необходимо для реализации этого for внутри while:

char starStr[512]; for (int i = 0; i < getWordLen(word); i++) { starStr[i] = '*';

Я предлагаю вам поставить его вне пока я oop и посмотрим, что получится.

Если он всегда дает вам 188 длины, он считает что-то постоянное и может быть связано с этим внешним l oop.

Надеюсь, вы сможете решить это!

...