c++ - 无法理解 C 中字符串和循环的这种意外行为

标签 c++ c string for-loop char

这是我的 C 程序及其输出的屏幕截图,这是我在一本书中遇到的问题。

enter image description here

如您所见,我的代码中有一个“for”循环。所以我所做的是,我改变了循环初始化的值

for(i=6;s1[i]!='\0';i++);

现在输出再次

矩阵 尺码 6

我一次又一次地改变初始化值,然后获取“i”的输出值,如下

初始化 |||| (i) 的输出值

6 -> 6

7 -> 11

8 -> 11

9 -> 11

10 -> 11

11 -> 11

12 -> 20

我的问题

为什么它没有得到我的值 i = 循环的初始化值, 每当我将循环的初始化值>输入字符串的大小(即在本例中为“矩阵”)时?

因为 6 之后的所有字符数组元素都应该为 null,不是吗?

最佳答案

because all the char-array element after 6 should be null, shouldn't they ?

不,它们不必是\0。它们可以持有任何值(value)。您只需循环直到找到恰好存在的下一个0。当你实例化一个内置类型的自动存储数组时,如下所示:

char s[20];

没有对元素执行初始化。它们具有不确定的值。从它们中读取甚至是未定义的行为。您可以像这样强制对元素进行零初始化:

char s[20] = {};

关于c++ - 无法理解 C 中字符串和循环的这种意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20211036/

相关文章:

c++ - 在负载测试中对 __pthread_mutex_cond_lock_full 断言失败

c++ - C2995 : template already defined

c - 奇怪的类型转换行为

vb.net - 验证字符串不包含已知值之外的值 [VB.NET]

c# - 根据 C# 中的字符数将长字符串拆分为子字符串

java - 在Java中将类似文件的字符串拆分为字符串

c++ - Linux 协作框架中线程数的实际限制

C pthread 和 struct 问题

c - 为什么 gcc 不为 int 和 char 产生类型不匹配警告?

c++ - 使用 Linux、C++、Kdevelop、gcc、64 位应用程序升级问题