[問題] 動態記憶體分配與printf問題
開發平台(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
也是一樣,一次輸出兩個,不夠就擴充記憶體,但程式卻老是中斷在這,實在是搞不懂
哪裡錯了,可以請大大幫我看看嗎,新手初學乍練,請多多指教><
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.185.169.162
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1420839785.A.47E.html
→
01/10 08:06, , 1F
01/10 08:06, 1F
→
01/11 21:23, , 2F
01/11 21:23, 2F