为什么我的strlen功能会"崩溃"?

3 c crash strlen

我正在尝试strlen用C 编写一个函数,但它不起作用.

int strlen(char*string)
{
    int length=0;
    while(length[string]!='0')
    {
        ++length;
    }
    free(string);
    return length;
}
Run Code Online (Sandbox Code Playgroud)

无论我运行多少次编译器,它都会继续崩溃.我的代码有什么问题?

abe*_*nky 15

你的while循环不应该与之比较'0'.
'0'(ascii)值48!

字符串不以48
结尾.字符串以0结尾.

你应该这样做:

while(length[string] != 0)
Run Code Online (Sandbox Code Playgroud)

(以及关于代码中其他问题的所有其他答案和评论也是准确的)

  • @KerrekSB:'0'是什么关系?它是错的,无论其价值如何.(在这个人使用的大多数系统中,*很可能是*48) (7认同)

Luc*_*ore 14

你可能正在free记忆该功能不拥有的内存.

例如:

strlen("42");
Run Code Online (Sandbox Code Playgroud)

会崩溃因为"42"是一个字符串文字 - 你无法修改它.

请注意,这'0'不是字符串的终止字符,而是实际'0'字符.使用'\0'0.

删除free它应该工作.

我也会选择更惯用的string[length],如果- 请注意,这是非法的string == NULL,所以在那里进行空检查.

  • 还有,`'\ 0'`.[填料] (6认同)