可以无限输入字符字符的程序
2013-03-12 18:11
218 查看
今天发现一个奇怪的现象,写了一个c程序,用gcc编译器编译,居然没有报错,而且还能正常运行
看代码:
虽然我申请了很小的空间(一个字节),但是p还是可以接收我输入的任意长的字符串,并且可以看到p所指的空间确实是增大了!!
运行结果:
这能不能算gcc的一个bug?
看代码:
#include <stdio.h> #include <stdlib.h> int main() { char *p = (char*)malloc(1); //申请了一个很小的空间 printf("len is %d\n", strlen(p));//打印p所指的大小 printf("addr:0x%x\n", (int)p);//打印p所指的内存地址 gets(p);//从键盘读入一行字符 //scanf("%s", p);//或者用scanf来读,结果一样 printf("len is %d\n", strlen(p));//打印读入字符后的长度 printf("addr:0x%x\n", (int)p);//打印读入字符后的内存地址 printf("%s\n", p);//打印读入的内容 free(p); p = NULL; return 0; }
虽然我申请了很小的空间(一个字节),但是p还是可以接收我输入的任意长的字符串,并且可以看到p所指的空间确实是增大了!!
运行结果:
这能不能算gcc的一个bug?
相关文章推荐
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符。
- //1.编写代码模拟三次密码输入的场景。//2.编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出。
- 编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中: 假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次 读入一个字符,而且当您按
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符
- 编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中: 假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次 读入一个字符,而且当您按下回车键时会产生换行符(/n)
- c++ 自己实现getLine函数,可以接受任意的字符长度的输入
- ACM--输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。
- 【C语言】编写一个程序统计输入字符串中: 各个数字、空白字符、以及其他所有字符出现的次数。
- 编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出。
- 编写一个程序,将输入复制到输出,并将其中的制表符替换为\t,把回退符替换为\b,把反斜杠替换为\\,这样可以把制表符和回退符以可见的方式显示出来。
- 练习 1- 10 编写一个将输入复制到输出的程序,并将其中的制表符替换成 \t,把回退符替换成\b,把反斜杠替换为\\。 这样就可以将制表符和退格符以可见的方式显示出来。
- C语言 字符串 编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
- 【程序17】输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
- 编写一个程序统计输入字符串中: 各个数字、空白字符、以及其他所有字符出现的次数
- 编写一个程序。该程序读取输入直到遇到#字符。使程序打印每个输入的字符以及他的十进制ASCII码。每行打印8个字符/编码对。
- [南阳OJ-No.4]ASCII码排序|输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。
- 有没有不用string类就可以实现动态的输入字符串,编写时不限定字符个数!!急急!!!
- 【C语言】编写一个程序统计输入字符串中: 各个数字、空白字符、以及其他所有字符出现的次数。
- 编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出。