Vilfredo11
@Vilfredo11
....

Как думаете, с чем связана ошибка и как ее исправить?

скриншот:

Скриншот фрагмента кода удалён модератором.

Ниже написанный код.
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int longestWord(char* str, char* longest_word) {
    int len = strlen(str);
    int max_len = 0, word_len = 0, word_start = 0;
    for (int i = 0; i <= len; i++) {
        if (str[i] == ' ' || str[i] == '\0') {
            word_len = i - word_start;
            if (word_len > max_len) {
                max_len = word_len;
                strncpy(longest_word, str + word_start, max_len);
            }
            word_start = i + 1;
        }
    }
    return max_len;
}

void wordsOfSameLength(char* str, int len) {
    int str_len = strlen(str);
    int word_len = 0, word_start = 0;
    cout << "Words of same length as the longest word:" << endl;
    for (int i = 0; i <= str_len; i++) {
        if (str[i] == ' ' || str[i] == '\0') {
            word_len = i - word_start;
            if (word_len == len) {
                for (int j = word_start; j < i; j++) {
                    cout << str[j];
                }
                cout << endl;
            }
            word_start = i + 1;
        }
    }
}

int main() {
    char filename[] = "input.txt";
    ifstream fin(filename);
    if (!fin.is_open()) {
        cout << "Could not open file " << filename << endl;
        return 1;
    }
    char str[100];
    fin.getline(str, 100);
    fin.close();

    char longest_word[100];
    int max_len = longestWord(str, longest_word);

    cout << "Longest word: " << longest_word << ", length: " << max_len << endl;

    wordsOfSameLength(str, max_len);

    return 0;
}
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 2
@res2001
Developer, ex-admin
Про size_t - если вы на 100% уверены, что у вас никогда не случится потеря данных при преобразовании из 8 байтного беззнакового size_t в 4 байтный знаковый int, то можете сделать явное преобразование типов (cast). Но гораздо правильней для размера (всего чего угодно) использовать size_t (а не int), как это давно уже делают в std.
Про strncpy - в некоторых случаях она может быть не безопасной. Если вы на 100% уверены, что в вашем случае она точно безопасна, то можно забить на ошибку, объявить макрос, который указан в тексте ошибки и на этом проблема будет исчерпана. Но есть безопасные аналоги строковых функций у них к имени добавляется суффикс _s. В вашем случае безопасный аналог strncpy_s. Используйте безопасные функции. Безопасные функции немного медленней работают, за счет дополнительных проверок и т.п.
Ответ написан
Так там же явно написано:
C4267 - size_t действительно теоретически быть больше, чем int
C4996 - strncpy действительно может небезопасной.

Там же явно написано о том, как их можно исправить - читай внимательно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы