c++ - 我正在尝试计算 char 数组中的内容直到空终止,但每次编译时我得到的数字都大于我的数组

标签 c++ pointers memory-management pointer-arithmetic

无论我为数组大小设置什么值,我编写的函数都会返回一个更大的值。

我试过 while(*str++) 并从 while 循环中删除 str++,而不是现在的内容。

我正在使用 Visual Studio 2019。

int strlen(char* str)
{
    int i = 0;

    while (*str != '\0')
    {
        i++;
        str++;

    }

    return i;
}

int main()
{
    char line[1];
    char* v = line;
    char* s = new char[1];
    cout << "for s " << strlen(s) << endl;
    cout << "for v " << strlen(v) << endl;

}

最佳答案

您忽略了以空值终止您的字符串。您的函数正在遍历数组末尾并导致未定义的行为。一些字符串操作函数会将 null 放在末尾,但如果您希望您的字符串有一个终端 null,您必须自己把它放在那里。

char line[2];
char* v = line;
line[0]='x';
line[1]= '\0';

关于c++ - 我正在尝试计算 char 数组中的内容直到空终止,但每次编译时我得到的数字都大于我的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55930404/

相关文章:

c# - C#/C++ 之间的 Replace() 差异

C++链表节点创建导致无限循环

c - 将常量指针作为参数传递给另一个函数的问题

c - ANSI C 在创建结构时必须使用 malloc() 吗?

c++ - 基于策略的设计C++问题

C++ 动态内存分配

C++ 指针和引用

python - 递归调用中的局部常量

c++ - 在堆栈上创建 C++ 对象,努力不分配

c++ - 如果我使用 BLAS/cuBLAS 以使其性能优于普通 C/CUDA,矩阵应该有多大?