该计划是如何运作的?

时间:2014-03-15 22:55:20

标签: c

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();
}

1 个答案:

答案 0 :(得分:0)

此检查:str1 [i]&gt; ='\ 0'是签名比较。一旦您通过str1的边界访问未初始化的数据,您最终将访问一个值为&gt;的字节。 127,在签名比较中使用时为负,因此小于零('\ 0'),因此循环终止。程序也可能在遇到负字节之前遇到访问冲突和崩溃 - 它只取决于内存中的内容,但是如果它没有崩溃,你的程序将会破坏str2之后的内存。

此代码不安全,是缓冲区溢出发生的一个示例。终止循环的正确检查是“str1 [I]!='\ 0'”。