搜索

C语言字符串越界问题。我申请10个字符空间,用scanf输入了15个字符,怎...

发布网友 发布时间:2024-09-27 16:24

我来回答

5个回答

热心网友 时间:2024-10-07 13:24

你定义的是指针,而不是数组,虽然指针和数组在用起来看似一样,其实差别很大。数组的变量存储空间在定义时是分配的,指针是一直往后读写,只要后面让读写,就会读下去。这样理解,超出部分也一定占了存储空间,这个存储空间可能是没有使用的,也可能是使用过的,如果里面的数据正被调用,那就会异常。另外,当你再次扩大数组范围时,也可能会产生异常。
你会发现:char *str1;时sizeof(str1)的值永远是4,而char str1[10];sizeof(str1)的值永远是10,也就是这个道理。

热心网友 时间:2024-10-07 13:24

malloc每次在分配的时候,分配的空间比实际要求的多些,它分配内存时会保留一定的空间用来记录分配情况,多次分配会导致空间的浪费。所以你超出了申请的内存空间没出现异常是正常的。但是最好还是不要越界,以免破坏它的数据结构!!

热心网友 时间:2024-10-07 13:17

内存操作产生异常基本都是由于读写了非法内存,由于你在malloc一段内存时,后续内存并未被使用只是一堆的乱码,当然是可写的,你调用的printf("%s size:%zu \n", str1, strlen(str1));打印的结果是不定的,要看程序当前堆内存情况而定,直到遇到字符串结束符为止

热心网友 时间:2024-10-07 13:18

在内存空间,你申请的空间是10,如果你输入的数大于这个值,那么你大于以后的那些值就丢失 了 ,就像电梯一样超载了 超载的那些人是无法进入电梯的, 到最后上楼的只有空间的那些字符数。

热心网友 时间:2024-10-07 13:17

scanf读取的字符先存到缓存区的,再从缓存区读取10个存到str1指向的空间,所以打印正常的。
没有改到其它内存空间的数据,只是在缓存区里有15个字符,但存到str1中的,只有10,因为他只有存10个字符的空间。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top