2014-10-26 38 views
0

我想要实现的是,每一个用户输入如下所示的名称时间存储名称的C程序:函数存储在2D阵列的消息(在C程序设计)

func1的: 读:约翰

FUNC2 打印约翰

FUNC1: 阅读:迈克尔

FUNC2 打印:约翰 打印:迈克尔

我想知道如何在2个功能中做到这一点,而不是一个单一的功能。

  • 我有2个功能。
  • 功能1个 由用户inputed -reads消息。(5条消息的最大数量)

void read(void) 
{ 
    int i; 

    char read[100]; 
    // char * msg = (char *) malloc(sizeof(msg)); 

    //i want to read 5 messages from user 
    for (i=0;i<5;i++) 
    { 
     scanf("%s",&read); 
     //i want to copy the message read into a variable msg, 
     //i dont know why i am doing this 
     //strcpy(msg,read); 
     //i want to call the store funcion 
     store(read); 
    } 
} 
  • 功能2
    • 它被称为在功能1的循环读取5个mesaages
    • 取消息,并将其传递给它的参数
    • 它在一个二维数组存储消息
    • 打印整个2d阵列

int store(char *stock) 
{ 
    printf("saving.....stored\n"); 
    char share[5][10]; //this is my 2d array to hold 5 
         //messages/names of 10 chars long 
    int i=0; 

    char * savedmsg = (char *) malloc(sizeof(savedmsg)); 
    strcpy(share[i],stock); 

    printf("%s\n",share[i]); 
    i++; 
    printf("%s\n", share[1]); 
} 

我已经开始这个星期的学习C,但我相信我得到的错误是FUNC2不断重新初始化i=0;,我希望它增加i++;所以FUNC2保持在覆盖二维数组的第一个索引。

感谢您的帮助。

+0

'i = i ++'是未定义的行为。 '我++'会增加'我'。 – interjay 2014-10-26 17:56:08

+0

'i ++'或'i = i + 1',但不是'i = i ++'。你也在通过'malloc'记忆去记忆,然后在没有'free'的情况下抛弃它的引用。你甚至没有使用分配的内存。在写入'share []'之前,您还应该检查'i <5'。 'share []'只能存储长度为9的字符串,因为字符串附加了nul结束符。您也无法保证用户输入的字符数少于9个字符 - 通过用户输入可以很容易地使这些代码崩溃。 – Clifford 2014-10-26 19:15:37

+0

'sizeof(savedmsg)'是'char *'指针的大小 - 即使您想以某种方式使用'savedmsg',您似乎也不太可能打算这么做。在C中,最好不要从malloc强制返回 - 一个'void *'可以安全地分配给任何其他指针类型。 – Clifford 2014-10-26 19:20:54

回答

0

而不是使用

int i=0; 

的声明为static这样的:

static int i=0; 

函数调用期间的i值保存。

+0

谢谢你的工作 – user3035890 2014-10-27 00:29:15