无法执行内部功能strlen

时间:2019-09-05 14:13:11

标签: c++

我的任务是使用函数查找C样式字符串的长度。我确实解决了问题,但是当我通过调试器传递代码时,我发现了一些奇怪的东西。函数完成工作后,在返回cout <<“ ***” << endl的那一刻给了我一个数字;在屏幕上打印文本之前,它将被发送到function,功能再次起作用,但使用的是必须在屏幕上打印的文本。而且只有在此之后,它才会显示在屏幕上。如何运作?

#include "pch.h"
#include <iostream>
using namespace std;

unsigned strlen(const char *str)
{
    unsigned x = 0;
    while (str[x] != 0) x++;
    return x;
}

int main()
{
    // Test 1
    const char* str1 = "How do you do";
    if (strlen(str1) == 13)
        cout << "Test 1 passed" << endl;
    else cout << "Test 1 failed" << endl;
    // Test 2
    const char* str2 = "";
    if (strlen(str2) == 0)
        std::cout << "Test 2 passed" << std::endl;
    else std::cout << "Test 2 failed" << std::endl;
    // Test 3
    const char* str3 = "This is stepik.org";
    if (strlen(str3) == 18)
        std::cout << "Test 3 passed" << std::endl;
    else std::cout << "Test 3 failed" << std::endl;
    const char* str4 = "Russian Federation";
    if (strlen(str4) == 18)
        std::cout << "Test 4 passed" << std::endl;
    else std::cout << "Test 4 failed" << std::endl;
    const char* str5 = "Russia";
    if (strlen(str5) == 6)
        std::cout << "Test 5 passed" << std::endl;
    else std::cout << "Test 5 failed" << std::endl;
}

1 个答案:

答案 0 :(得分:2)

您做了一个坏事-您已使用标准库(strlen)中的名称作为自己函数的名称。实际上,您已经覆盖了它,并为所有麻烦打开了大门。该程序格式错误。

实际上,以cout作为参数的char*将确定字符串的长度,并调用strlen,这恰好是您的函数。