C中碰到的问题(gets和strcpy)

最近碰到了一些问题。

第一个是gets函数


#include <stdio.h>

int main()
{
        char buffer[5];
        gets(buffer);
        printf("%s\n",buffer);
        return 0;
}

$ ./a.out

adadadadadadadad

adadadadadadadad

$

定了buffer的大小为5,但是输入这么多还是可以正常输入输出。

其实编译的时候系统已经提示了“gets”function is dangerous and should not be used。

通过这个例子现在知道为什么是dangerous的了,因为输入多了,GETS还是会读进去,放在BUFFER装满后相邻的内存中,如果buffer相邻的内存没有要用的数据还好,要是存着要用的数据于是就悲剧了,数据就被冲洗掉了,所以gets这个函数很危险。

还有一个就是strcpy函数

#include <stdio.h>
#include <string.h>

int main()
{
        char buffer[50] = "china";
        strcpy(buffer,buffer+1);
        printf("%s\n",buffer);
}
~             

$. ./a.out

hnaa

$

原本的以为会打印出hina来,一直想不明白,明明是把后四个拷贝给buffer,为什么会变成hnaa呢?

还是内存问题,buffer和buffer+1是同一块内存上的,这样就会出现谁复制谁的一个问题了,buffer被拷贝后会被替换,但是替换完了这些内容又会被拿去拷贝,很难用语言去表达,大家可以自己理解下,同一块内存的东西拷贝给同一块内存,想想肯定是会出问题的。




你可能感兴趣的:(c,function,buffer,语言)