for循环应该是无限的,因为我已经为它指定了NULL'\ 0'但是它正常运行..
/* a program to copy string str1 to str2 without using string handling function*/
#include<stdio.h>
void main()
{
char str1[50],str2[50],ch;
int i;
printf("Enter String1:");
gets(str1);
for(i=0; str1[i]>='\0'; i++)
{
str2[i]=str1[i];
}
printf("String1 : %s\nString2 : %s\n", str1, str2);
getch();
}
答案 0 :(得分:0)
此检查:str1 [i]&gt; ='\ 0'是签名比较。一旦您通过str1的边界访问未初始化的数据,您最终将访问一个值为&gt;的字节。 127,在签名比较中使用时为负,因此小于零('\ 0'),因此循环终止。程序也可能在遇到负字节之前遇到访问冲突和崩溃 - 它只取决于内存中的内容,但是如果它没有崩溃,你的程序将会破坏str2之后的内存。
此代码不安全,是缓冲区溢出发生的一个示例。终止循环的正确检查是“str1 [I]!='\ 0'”。