Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么这段代码的输出是6?_C - Fatal编程技术网

C 为什么这段代码的输出是6?

C 为什么这段代码的输出是6?,c,C,上面的代码给出6作为输出。 在这种情况下,输出应为1 int main(){ char s[1000]; s[0]='Q'; printf("%d",strlen(s)); return 0; } 这段代码甚至给出了6作为输出。 其中它应该是1000或0或一些垃圾值。 我在《黑客银行》中试过,但长度是6。 在TURBOC中尝试相同的代码时,它给出了正确的答案。 我无法找到此输出的原因。有人

上面的代码给出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];     
       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