【发布时间】:2011-02-11 17:06:15
【问题描述】:
我是来用另一个可能非常简单的 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;
}
2 个问题。为什么它们不同,为什么 y 是 6?谢谢大家。
编辑:对不起,我知道什么会解决它,我只是想了解发生了什么。那么 strlen 是否只是继续转发该点,直到它碰巧找到 \0?另外,当我在 main 函数中而不是在 get_len 函数中执行 strlen 时,两者都是 4。这只是巧合吗?
【问题讨论】:
-
是的,这只是巧合。
-
作为答案的旁白(如果有点重复,那就太好了)我要指出,虽然
"test"是序列't','e','s','t',0的一种方便语法,但实际上你可以作为一个特殊的case 用char y[4]="test";初始化一个 char 数组,在这种情况下,最后的 0 将被省略(在y中根本没有空间)。