所以,我可以预测这个程序会做什么:
int main()
{
char d[] = {'h','e','l','l','o'};
const char *c = d;
std::cout << *c << std::endl;
while ( *c ) {
c = c + 1;
std::cout << *c << std::endl;
if ( *c == '\0' )
std::cout << "Yes" << std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
从我的理解,代码应该永远不会打印是因为\0字符数组中没有d[],所以这个程序正在采摘的垃圾值是什么?我做了这个,同时应该无限次地运行.是对的吗?
这个问题的正确答案是程序表现出未定义的行为,因为它超过了数组的末尾.
更改程序以使用字符串文字进行初始化会将行为更改为"始终打印"Yes":
char d[] = "hello";
Run Code Online (Sandbox Code Playgroud)
我做了这个,同时应该无限次地运行.
一旦发生未定义的行为,所有赌注都将被取消.但是,通常程序设法在内存中找到零字节,d[]然后打印"Yes",并退出循环.
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |