我已经开始打扰你了另一个可能非常简单的C问题.
使用以下代码:
int get_len(char *string){
printf("len: %lu\n", strlen(string));
return 0;
}
int main(){
char *x = "test";
char y[4] = {'t','e','s','t'};
get_len(x); // len: 4
get_len(y); // len: 6
return 0;
}
Run Code Online (Sandbox Code Playgroud)
2个问题.为什么他们不同,为什么是6?多谢你们.
编辑:对不起,我知道会解决什么问题,我只是想了解发生了什么.那么strlen只是继续转发这个点,直到碰巧找到一个\ 0?此外,当我在主函数而不是get_len函数中执行strlen时,两者都是4.这只是巧合吗?
Fre*_*son 14
y不是以null结尾. strlen()计算字符直到它遇到空字符.你的碰巧在6点之后找到了一个,但它可能是任何数字.试试这个:
char y[] = {'t','e','s','t', '\0'};
这是一个strlen()可能看起来像的实现(在我的头顶 - 没有我的K&R书很方便,但我相信那里有一个实现):
size_t strlen(const char* s)
{
size_t result = 0;
while (*s++) ++result;
return result;
}
Run Code Online (Sandbox Code Playgroud)