2014-12-06 129 views
-5

我想用一個指向char的指針數組編寫一個程序,我在那裏存儲從控制檯讀取的字符串。字符串由\ n決定。任何想法我可以做到這一點?從控制檯讀取字符串

代碼與僞代碼的組合至今:

char** arr; 

arr = malloc(sizeof(char*) * 5); 
arr = malloc(sizeof(char) * 10); 

while (No \n read) { 
    // Store the string in the array 
} 

我真的不知道如何做到這一點。

回答

-2

你可以使用這個。

創建新的char變量併爲其分配內存。然後得到像這樣的輸入。

p=(char *)malloc(100);  
while ((*p=getchar())!='\n')p++; 
*arr[0]=p; 

如果你想創建多行,然後動態分配該變量的內存,然後將其存儲在指針數組中。

+0

你不需要投。爲什麼不檢查分配內存的溢出?關於如何從一開始就讀取輸入的數據或釋放內存的想法? – 2014-12-06 09:28:36

-1
#include <stdio.h> 
#include <stdlib.h> 

int main(){ 
    int i; 
    char **arr; 
    arr = malloc(sizeof(char*) * 5);//for 5 string 

    for(i=0;i<5;++i){ 
     arr[i] = malloc(sizeof(char) * 10);//reserved storage space length 9 
     scanf("%9[^\n]%*c", arr[i]);//Read until \n, and discard \n 
    } 
    printf("\n"); 
    //check print and free 
    for(i=0;i<5;++i){ 
     puts(arr[i]); 
     free(arr[i]); 
    } 
    free(arr); 
    return 0; 
} 

int i, n; 
char **arr; 
arr = malloc(sizeof(char*) * 5); 

for(i=0;i<5;++i){ 
    arr[i] = malloc(sizeof(char) * 10); 
} 
i=0; 
while(i<5 && 1==scanf("%9[^\n]%*c", arr[i])) 
    ++i; 
n = i; 
printf("\n"); 
//check print 
for(i=0;i<n;++i){ 
    puts(arr[i]); 
} 
//deallocate 
for(i=0;i<5;++i) 
    free(arr[i]); 
free(arr); 
+0

非常感謝你,唯一的問題是,我需要用while循環來做這件事,因爲如果輸入字符串是空的,我想要退出程序的可能性,我該如何改變它? – firana 2014-12-06 17:18:35

+0

@firana我添加了一個變化的例子 – BLUEPIXY 2014-12-06 17:42:28