Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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++ C++;While语句和字符串处理混乱?_C++ - Fatal编程技术网

C++ C++;While语句和字符串处理混乱?

C++ C++;While语句和字符串处理混乱?,c++,C++,然后我取消对“printf”语句的注释: h e l l o // end 为什么结果如此不同?“While”条件是如何存在的(精确的*cp值)? C++底漆第五页110 < /P> hello%s h e l l o % s // end 此循环条件正在循环,直到找到NUL字符为止。这相当于: while(*cp) ca不是NUL终止的,因此循环从数组末尾运行并调用未定义的行为。未定义的行为意味着任何事情都可能发生。† 要解决此问题,请添加一个NUL终止符 while(

然后我取消对“printf”语句的注释:

 h
 e
 l
 l
 o
 // end
为什么结果如此不同?“While”条件是如何存在的(精确的*cp值)? C++底漆第五页110 < /P>
hello%s

h
e
l
l
o
%
s


// end
此循环条件正在循环,直到找到NUL字符为止。这相当于:

while(*cp)
ca
不是NUL终止的,因此循环从数组末尾运行并调用未定义的行为。未定义的行为意味着任何事情都可能发生。†

要解决此问题,请添加一个NUL终止符

while(*cp != '\0')
或者,相当于

const char ca[] = {'h','e','l','l','o','\0'};

†在第一种情况下,循环似乎立即结束,因为在
'o'
后面的内存中碰巧有一个NUL字节。但是在第二种情况下,
“%s”
字符串恰好与
ca
相邻,因此也会打印出来<代码>“%s”是正确的NUL终止符,因此循环在打印后结束。

一个无害的
printf()
调用可以改变一个不相关循环的行为,这就是一个不可预测的未定义行为的例子。它并不总是那么温和。这可能会使你的程序崩溃。它甚至可以让它继续工作一段时间,然后再以一种完全令人困惑的方式行为不端。不要依赖未定义的行为来预测行为。

此循环条件正在循环,直到找到NUL字符为止。这相当于:

while(*cp)
ca
不是NUL终止的,因此循环从数组末尾运行并调用未定义的行为。未定义的行为意味着任何事情都可能发生。†

要解决此问题,请添加一个NUL终止符

while(*cp != '\0')
或者,相当于

const char ca[] = {'h','e','l','l','o','\0'};

†在第一种情况下,循环很快结束,因为内存中碰巧有一个NUL字节,遵循
'o'
。但是在第二种情况下,
“%s”
字符串恰好与
ca
相邻,因此也会打印出来<代码>“%s”是正确的NUL终止符,因此循环在打印后结束。

一个无害的
printf()
调用可以改变一个不相关循环的行为,这就是一个不可预测的未定义行为的例子。它并不总是那么温和。这可能会使你的程序崩溃。它甚至可以让它继续工作一段时间,然后再以一种完全令人困惑的方式行为不端。不要依赖未定义的行为来预测行为。