C/C++

С++ ошибка в коде

 int mystrlen(char* str); 
int main() {
setlocale(LC_ALL, "");
SetConsoleCP(1251);
std::cout
 size_t mystrlen(const char* s) { 
size_t length = 0;
if (s) while (s[length]) ++length;
return length;
}
Кирилл Максимов
Кирилл Максимов
51 915
Лучший ответ
В коде, который вы предоставили, есть ошибка в функции `mystrlen`. У вас отсутствует фигурная скобка для тела цикла `for`. Вместо этого, возвращается значение `i` после первой итерации цикла. В результате, функция завершается и возвращает `0` при первом же нулевом символе в строке, что неправильно.

Вот исправленный код:

```cpp
#include <iostream>
#include <windows.h>

int mystrlen(const char* str);

int main() {
setlocale(LC_ALL, "");
SetConsoleCP(1251);
std::cout << "Длина строки ПРИВЕТ ВСЕМ равна: ";
std::cout << mystrlen("ПРИВЕТ ВСЕМ");
return 0;
}

int mystrlen(const char* str) {
int i;
for (i = 0; str[i]; i++) {
// Тело цикла
}
return i;
}
```

В этой версии кода, фигурная скобка добавлена после строки `for (i = 0; str[i]; i++)`, чтобы охватить всё тело цикла. Теперь функция `mystrlen` правильно считает длину строки и возвращает её.
Дмитрий А
Дмитрий А
5 034
Сам по себе, написанный код - ужасно корявый, но тем не менее, учись. Вот решение...
Строковые литералы (cтрока "ПРИВЕТ ВСЕМ" в данном случае) является указателем на константный массив char. Это не то же самое, что указатель на char. Как следует из названия этого указателя, строковый литерал нельзя изменять.
Цикл for у тебя написан неверно.

int mystrlen(const char* str);

int main()
{
setlocale(LC_ALL, "");
SetConsoleCP(1251);
std::cout << "Длина строки ПРИВЕТ ВСЕМ равна: ";
std::cout << mystrlen("ПРИВЕТ ВСЕМ");
return 0;
}

int mystrlen(const char* str)
{
int i;
for (i = 0; str[i]; i++) {}

return i;
}