|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
代码
- #include<stdio.h>
- //这里被限制住了导致最大只能输入这么大的字符
- char str[10000000];
- int main() {
- printf("请输入任意字符:");
- fgets(str, sizeof(str) / sizeof(char), stdin);
- fputs(str, stdout);
- return 0;
- }
复制代码
- #include<stdio.h>
- #include<stdlib.h>
- #include<malloc.h>
- char* autoalloc_gets(char* str, size_t* capacity) {//自动扩容版的 gets
- char* temp;
- size_t index = 0;
- for (;;) {
- if (index + 1 < *capacity) {
- switch (str[index] = getchar()) {//遇到以下字符,终止扫描
- case '\n':
- case '\r':
- case EOF:
- str[index] = '\0';//'\0' 的话,就不需要重置了
- case '\0':
- *capacity = index + 1;
- return (char*)realloc(str, *capacity * sizeof(char));
- }
- ++index;
- }
- else {//扩容
- *capacity <<= 1;//默认扩容为原容量的 2 倍
- if (temp = (char*)realloc(str, *capacity * sizeof(char))) {//为了防止 realloc 返回 NULL 造成内存泄露
- str = temp;
- }
- else {//扩容失败,直接返回
- str[index] = '\0';//放置字符串终止符
- *capacity >>= 1;//退回来
- return str;
- }
- }
- }
- return 0;//装饰,防止编译器报错
- }
- int main() {
- size_t capacity = 100;
- puts(autoalloc_gets((char*)malloc(100 * sizeof(char)), &capacity));
- return 0;
- }
复制代码
这个就可以自动扩容啦~满意麻烦给个最佳哦~ 
|
|