int mystrlen(char* str);
int main() {
setlocale(LC_ALL, "");
SetConsoleCP(1251);
std::cout
C/C++
С++ ошибка в коде
size_t mystrlen(const char* s) {
size_t length = 0;
if (s) while (s[length]) ++length;
return length;
}
В коде, который вы предоставили, есть ошибка в функции `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` правильно считает длину строки и возвращает её.
Вот исправленный код:
```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` правильно считает длину строки и возвращает её.
Сам по себе, написанный код - ужасно корявый, но тем не менее, учись. Вот решение...
Строковые литералы (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;
}
Строковые литералы (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;
}
Похожие вопросы
- Ошибки в коде c++
- Помогите, пожалуйста, исправить ошибку в коде (C++).
- Помогите найти ошибку в коде
- Где ошибка в коде с++
- Задача на максимальное произведение в векторе C++ Где ошибка в коде?
- Ошибки в коде. Почему не работает и как сделать чтобы заработало ?
- Помогите найти ошибки в коде на C++, не выводится последняя строчка
- Выдаёт ошибку в коде.Помогите
- Помогите исправить ошибку в коде, смотри внутри.
- Где ошибка в коде?