C 为什么这段代码的输出是6?
上面的代码给出6作为输出。 在这种情况下,输出应为1C 为什么这段代码的输出是6?,c,C,上面的代码给出6作为输出。 在这种情况下,输出应为1 int main(){ char s[1000]; s[0]='Q'; printf("%d",strlen(s)); return 0; } 这段代码甚至给出了6作为输出。 其中它应该是1000或0或一些垃圾值。 我在《黑客银行》中试过,但长度是6。 在TURBOC中尝试相同的代码时,它给出了正确的答案。 我无法找到此输出的原因。有人
int main(){
char s[1000];
s[0]='Q';
printf("%d",strlen(s));
return 0;
}
这段代码甚至给出了6作为输出。
其中它应该是1000或0或一些垃圾值。
我在《黑客银行》中试过,但长度是6。
在TURBOC中尝试相同的代码时,它给出了正确的答案。
我无法找到此输出的原因。有人能帮我整理一下并给出这个问题的确切解决方案吗。局部非静态变量,如数组,将不会初始化。其价值或内容将不确定 这意味着数组中包含字符串终止符的可能性接近于零 在不初始化的情况下将数组传递给字符串函数会导致未定义的行为 您需要显式初始化数组,例如
int main(){
char s[1000];
printf("%d",strlen(s));
return 0;
}
本地非静态变量(如数组)将不会初始化。其价值或内容将不确定 这意味着数组中包含字符串终止符的可能性接近于零 在不初始化的情况下将数组传递给字符串函数会导致未定义的行为 您需要显式初始化数组,例如
int main(){
char s[1000];
printf("%d",strlen(s));
return 0;
}
该行:
char s[1000] = "";
声明一个包含1000个字符的数组,但不在其中放入任何内容。因为它是一个局部变量,所以它被分配到堆栈上,除了保留必要的空间来容纳1000个char
s之外,编译器不会生成任何代码来设置它们的内容(为零或其他)
所有1000个值都是垃圾。正好第七个是零strlen()
到达时停止计数并返回6
,但该值也是垃圾。它可能是230790345
或其他东西。它还可能产生一个无限循环,一个分段错误,或者让你像龙一样吐出火焰。在这种情况下,语言所允许的任何事情都是可能的。它被称为。行:
char s[1000] = "";
声明一个包含1000个字符的数组,但不在其中放入任何内容。因为它是一个局部变量,所以它被分配到堆栈上,除了保留必要的空间来容纳1000个char
s之外,编译器不会生成任何代码来设置它们的内容(为零或其他)
所有1000个值都是垃圾。正好第七个是零
strlen()
到达时停止计数并返回6
,但该值也是垃圾。它可能是230790345
或其他东西。它还可能产生一个无限循环,一个分段错误,或者让你像龙一样吐出火焰。在这种情况下,语言所允许的任何事情都是可能的。它被称为。您是否在字符串末尾追加了\0
?您应该在文档中查找strlen()。man strlen.'6'是一个垃圾值:)您是否将\0
附加到字符串末尾?您应该在文档中查找strlen()。manstrlen.'6'是一个垃圾值:)您还可以使用chars[1000]={0}
用'\0'
s来填充它。@InternetAussie我的初始化和你的一样。哦,是的。哎呀。还有一种选择:pYou也可以使用chars[1000]={0}
用'\0'
s来填充它。@InternetAussie我的初始化和你的一样。哦,是的。哎呀。还是另一种选择:p