2014-12-06 93 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