[問題] 動態記憶體分配與printf問題

看板C_and_CPP作者 (preparefortest)時間10年前 (2015/01/10 05:43), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串1/1
開發平台(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
malloc是stdlib.h的函式 試試引用它
01/10 08:06, 1F

01/11 21:23, , 2F
你這樣寫 只要輸入的字元數超過5就會出錯
01/11 21:23, 2F
文章代碼(AID): #1Ki4jfH- (C_and_CPP)