字符指针malloc分配空间的小问题请教大家......!!

来源:百度知道 编辑:UC知道 时间:2024/06/14 03:30:27
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *str;
str=(char*)malloc(2*sizeof(str));
scanf("%s",str);
printf("%s\n",str);
}

分配了2个字节的空间给str,但输入超出2越界都没出现问题,为什麼????
如果我想输入的字符串不受限制,该如何修改上面???

str 只是指向字符串的初始字符的地址,当输入超出2个字符时,系统会将已经被占用的空间分配给它,所占的存储空间若没有存储重要信息不会出现问题。
若想输入的字符串不受限制,可以将上限设大点,也可以用动态分配存储空间的方法。
int limit;
char * str;
scanf("input the length of the string:",&limit);
str=(char *)malloc((limit+1)*sizeof(char));
/*有一个\0字符*/
scanf("%s",str);
printf("%s\n",str);

字符结束符号也要占1个字节。'\0' zhan yi ge byte.

要想不受限制的话你恐怕得一个一个字符输入,这样比较实用,就是输入一个字符它判别一次.

本来就不受限制,只是说超出过了范围是危险的
比如
char* s="abcde"就相当于由系统给你分配了6个字节的空间
以及char s[6],char* s=(char *)malloc(6*sizeof(6))
这些方式都是说在6字节内安全
输入字符串肯定要限制的,只是把上限设置大点

malloc(n);
malloc函数的作用是分配分配指定长度内存块,如果分配成功则返回指向被分配内存首地址的指针,否则返回空指针NULL。
调用这个函数时系统自动寻找空闲的连续的内存,并保证返回的指针地址后n个字节是空闲的。但n个字节后的内存也可能是空闲的。这时越界是安全的,如果不是空闲的,程序就有可能报错或出现其他错误,这个要看编译软件,不同的编译软件是不同的结果。
输入字符串时把n设置大点,如果想要没限制就只能一个字符一个字符输入了。