为什么这个片段给出6作为输出?

时间:2017-05-23 10:57:50

标签: c

 int main(){    
       char s[1000];    
       s[0]='Q';    
       printf("%d",strlen(s));    
       return 0;    
    }

上面的代码给出了6作为输出。 在这种情况下,输出应为1。

int main(){    
       char s[1000];     
       printf("%d",strlen(s));    
       return 0;    
}

这段代码甚至给出6作为输出。 它应该是1000或0或一些垃圾值。 我在" hackerrank" ,但它的长度为6。 当在TURBOC中尝试相同的代码时,它给出了正确的答案。 我无法找到此输出的原因。有人可以整理出来并给出这个问题的确切解决方案。

2 个答案:

答案 0 :(得分:3)

本地非静态变量(如数组)不会被初始化。它的值或内容将不确定

这意味着您的数组包含字符串终结符的可能性接近于零。

将未经初始化的数组传递给字符串函数会导致未定义的行为

您需要显式初始化数组,例如

char s[1000] = "";

答案 1 :(得分:2)

该行:

char s[1000];  

声明一个包含1000个字符的数组,但它不会放入任何内容。因为它是一个局部变量,所以它是在堆栈上分配的,除了保留必要的空间来容纳1000 char之外,编译器不会生成任何代码来设置它们的内容(为零或其他东西)

所有1000个值都是垃圾。恰好它们的7 th 为零。 strlen()在到达它时停止计数并返回6,但此值也是垃圾。它可能是230790345或其他东西。它也可能产生一个无限循环,一个分段错误或让你像龙一样吐火。在这种情况下,任何语言都可以使用语言。它被称为Undefined Behaviour