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保持在覆盖二维数组的第一个索引。
感谢您的帮助。
'i = i ++'是未定义的行为。 '我++'会增加'我'。 – interjay 2014-10-26 17:56:08
'i ++'或'i = i + 1',但不是'i = i ++'。你也在通过'malloc'记忆去记忆,然后在没有'free'的情况下抛弃它的引用。你甚至没有使用分配的内存。在写入'share []'之前,您还应该检查'i <5'。 'share []'只能存储长度为9的字符串,因为字符串附加了nul结束符。您也无法保证用户输入的字符数少于9个字符 - 通过用户输入可以很容易地使这些代码崩溃。 – Clifford 2014-10-26 19:15:37
'sizeof(savedmsg)'是'char *'指针的大小 - 即使您想以某种方式使用'savedmsg',您似乎也不太可能打算这么做。在C中,最好不要从malloc强制返回 - 一个'void *'可以安全地分配给任何其他指针类型。 – Clifford 2014-10-26 19:20:54