[问题] 动态内存分配与printf问题

楼主: jackwe12 (preparefortest)   2015-01-10 05:43:03
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
这是一个书上的习题:
使用者由键盘输入一任意长度的字串(中英文大小写均可,亦可以空白键区
隔),程式将自动依据字串长度向作业系统扩充内存,并将该字串读入,同时将
该字串输出,并输出字符总数。
说明:
1. 程式默认之可处理之字串字符总数为 5。
2. 当键盘输入的字符总数达到(默认值-1)时,程式必须自动将可处理之字串字符
总数扩充为默认值的两倍。如有需要,依此原则持续扩充。
3. 如无法取得所需之动态内存空间,程式必须能够输出警告讯息,同时归还已
取得之空间并结束。
预期的正确结果(Expected Output):
希望能完整输出,不跳出错误
错误结果(Wrong Output):
只说触发中断点耶
程式码(Code):(请善用置底文网页, 记得排版)
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define _CRT_SECURE_NO_WARNINGS
#pragma warning( disable : 4996 )
char *extend_memory(char *a, int new_size);
int main()
{
char *data;
int ori_size = 5;
int len;
if ((data = (char *)malloc(ori_size*sizeof(char))) == NULL)
{
printf("Failed in allocating memory !\n");
exit(0);
}
while (scanf("%[^\n]", data) == 1); //将控制码改为%[^\n]即可接收到空白
{
if (ori_size - strlen(data) == 1)
data = extend_memory(data, ori_size *= 2);
}
while (printf(" The input string is : [%s]", data) == 1);
{
if (ori_size - strlen(data) == 1)
data = extend_memory(data, ori_size *= 2);
}
len = strlen(data);
printf(" with length %d\n", len);
system("pause");
return(0);
}
char *extend_memory(char *a, int new_size)
{
char *b;
if ((b = (char *)realloc(a, new_size*sizeof(char))) == NULL)
{
printf("Failed in extending the array\n");
free(a);
exit(0);
}
else
{
return(b);
}
}
补充说明(Supplement):
以上是我的程式码,上面是我按照讲义教学呼叫一个大小5的空间,然后下面是一个函
数,每当我当键盘输入的字符总数达到(默认值-1)时,就扩充为默认值两倍,然后我
试着用循环(这边不知写得对否)一次读两个字符,若不够则扩充内存,下面printf
也是一样,一次输出两个,不够就扩充内存,但程式却老是中断在这,实在是搞不懂
哪里错了,可以请大大帮我看看吗,新手初学乍练,请多多指教><
作者: narukaze (Pt)   2015-01-10 08:06:00
malloc是stdlib.h的函式 试试引用它
作者: OPIV (Monitor)   2015-01-11 21:23:00
你这样写 只要输入的字符数超过5就会出错

Links booklink

Contact Us: admin [ a t ] ucptt.com