realloc函数用于储存用户输入字符串时遇到的问题
#include <stdio.h>#include <stdlib.h>
int main(void)
{
char ch;
char *num=NULL;
int limit = 0;
long times = 0;
int reset=10;
num = (char *)malloc(10);
printf("请输入一个整数:");
while ((ch=getchar()) != '\n')
{
num = ch;
if (limit >= 10)
{
num = (char *)realloc(num, reset++);
times++;
}
}
num='\0' ;
printf("你输入的整数是:%s\n", num);
printf("重新申请了:%d次\n",times);
free(num);
return 0;
}
如图所示,输入的少没有问题。
但是打印到第17个字符总会变成.
请大神帮忙细说一下原因。 此题出自C语言课后作业S1E39,,动动手第0题
https://fishc.com.cn/forum.php?mod=viewthread&tid=80955&extra=page%3D2%26filter%3Dtypeid%26typeid%3D570 #include <stdio.h>
#include <stdlib.h>
int main(void)
{
char ch;
char *num=NULL;
int limit = 0;
long times = 0;
int reset=10;
num = (char *)malloc(10);
printf("请输入一个整数:");
while ((ch=getchar()) != '\n')
{
num = ch;
if (limit >= 10)
{
//num = (char *)realloc(num, reset++);
num = (char *)realloc(num, ++reset);
times++;
}
}
num='\0' ;
printf("你输入的整数是:%s\n", num);
//printf("重新申请了:%d次\n",times);
printf("重新申请了:%ld次\n",times);
free(num);
return 0;
}
试试:#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char ch;
char* num = NULL;
int limit = 0;
long times = 0;
int reset = 10;
num = (char*)malloc(10);
printf("请输入一个整数:");
while ((ch = getchar()) != '\n')
{
num = ch;
if (limit >= 10)
{
num = (char*)realloc(num, ++reset); // <---------- 这里 ----------
times++;
}
}
num[++limit] = '\0';
printf("你输入的整数是:%s\n", num);
printf("重新申请了:%d次\n", times);
free(num);
return 0;
} 人造人 发表于 2022-1-29 21:35
谢了,大佬!但是为什么会在第17个字节出现 . 可否解答一下? 傻眼貓咪 发表于 2022-1-29 21:48
试试:
谢了,大佬!但是为什么会在第17个字节出现 . 可否解答一下? 爱俯卧撑的123 发表于 2022-1-29 23:50
谢了,大佬!但是为什么会在第17个字节出现 . 可否解答一下?
你这个程序是错的,并不是所有的机器都输出 .
我这边就没有输出
不知道为什么输出 .
这你得问编译器,或者说编译器的作者
$ ./main
请输入一个整数:aaaaaaaaaaaaaaaaaaaaaaaaaa11111111111111111aaaaaaaaaa
corrupted size vs. prev_size
Aborted (core dumped) 本帖最后由 傻眼貓咪 于 2022-1-30 09:52 编辑
爱俯卧撑的123 发表于 2022-1-29 23:51
谢了,大佬!但是为什么会在第17个字节出现 . 可否解答一下?
我的编译器没有出现点,我不知道为什么你的会出现点,可能因编译器的不同,呈现状况也不同吧。但是这点不用太在意,因为代码是错的,基本算是越界了。{:10_254:}
报错:corrupted size vs. prev_size 人造人 发表于 2022-1-30 00:06
你这个程序是错的,并不是所有的机器都输出 .
我这边就没有输出
不知道为什么输出 .
好的谢谢! 傻眼貓咪 发表于 2022-1-30 09:49
我的编译器没有出现点,我不知道为什么你的会出现点,可能因编译器的不同,呈现状况也不同吧。但是这点 ...
好的谢谢!
页:
[1]