2012-11-23 54 views
0

好吧,我知道malloccalloc可用於動態分配,但作爲一個新CI不知道如何使用我輸入多個輸入,比如例如TC中分配的內存++中,我們有這樣的代碼使用malloc()進行多輸入?

#include <stdio.h> 
#include <string.h> 
#include <alloc.h> 
#include <process.h> 

int main(void) 
{ 
    char *str; 

    /* allocate memory for string */ 
    if ((str = (char *) malloc(10)) == NULL) 
    { 
     printf("Not enough memory to allocate buffer\n"); 
     exit(1); /* terminate program if out of memory */ 
    } 

    /* copy "Hello" into string */ 
    strcpy(str, "Hello"); 
    /* display string */ 
    printf("String is %s\n", str); 
    /* free memory */ 
    free(str); 

    return 0; 
} 

在這樣的代碼中,我們將Hello放在我們現在分配的內存中,應該給我們留下更多4個字符空間,我們應該將這些空間添加到這些空間中。

當用戶被問及輸入的數量,他說10或100時,我想實現這個想法,然後程序輸入數據並存儲它們並將數據打印到屏幕上。

+0

所以你要根據用戶輸入分配的大小? –

+0

您可能缺少'#include '指令。如果你想部分填充一些'malloc'-ed或'calloc' -ed動態分配的堆區,你可能需要做一些家務管理,例如,與當前和結束索引或指針。你可能想用'getline'來完全讀取一個'malloc'-ed行。 –

+0

在C中,不需要將調用結果強制轉換爲'malloc()'/'calloc()'。也不建議這樣做,因爲這可能會隱藏錯誤,因爲在您的示例中很可能是這種情況(請參閱* Basile *的註釋)。 – alk

回答

0

如果要附加到malloc編輯字符串,請使用strcat

str = malloc(20); 
... 
/* copy "Hello" into string */ 
strcpy(str, "Hello"); 
strcat(str, ", world!"); 
/* display string */ 
printf("String is %s\n", str); /* will print 'Hello, world!' */ 
1

您正在尋找「指針算術」。
在你的例子中,你正在分配10個字節的內存,並將第一個字節的地址存儲在指針str中。
然後,將字符串"hello"複製到此內存,這會留下您可以使用的4個字節(因爲"hello"是5個字節+字符串終止字符\0的一個字節)。
如果你想在剩下的4個字節中存儲一些東西,你可以用指針算術來計算內存地址。 例如,如果要訪問str中的第6個字節,那麼可以執行str+5。簡單。
因此,延長你的榜樣,你可以這樣做:

strcpy(str, "Hello"); 
strcpy(str+5, " man"); 

printf("String is %s\n", str);輸出將"Hello man"

+0

謝謝你清除了我的概念 – DevX