【发布时间】:2015-03-03 04:25:18
【问题描述】:
我需要编写一个执行以下操作的程序:
- 提示用户并询问他们希望输入多少字
- 使用 malloc() 分配动态内存来存储每个单词
- 动态分配另一个数组来存储指向每个单词字符串的指针,用指针填充它
- 动态分配一个额外的数组来临时存储传入的单词
- 提示用户输入与之前输入的字数相同的字符串。
- 一次将用户的输入读入临时数组中的一个单词,读取完每个单词后,将其传输到动态分配的数组中。
- 完成所有这些之后,我应该能够单独打印每个单词。
示例运行可能如下所示:
How many words do you wish to enter? 5
Enter 5 words now:
I enjoyed doing this exercise
Here are your words:
I
enjoyed
doing
this
exercise
在读取字符串时,程序应该将单词读入一个临时的char数组中,使用malloc()分配足够的存储空间来保存单词,并将地址存储在char指针数组中。这一步如何处理?
这是我的问题:如何调整我的临时数组的大小,使其足够大以容纳用户可能输入的任意单词,然后如何将其传输到存储数组?
#include <stdio.h>
#include <stdlib.h>
enum { MAX_WORD_SIZE = sizeof("Supercalifragilisticexpialidocious") };
void resign(char**,int);
int main()
{
char **p;
int n,i;
printf("How many words do you wish to enter?");
scanf("%d",&n);
p=calloc(n, sizeof(char*));
puts("Here are your words:");
resign(p,n);
for (i=0; i<n; i++) {
puts(p[i]);
}
}
void resign(char**p,int n)
{
int i=0,j=0;
char c;
char * temp_word = NULL;
getchar();
temp_word = malloc(MAX_WORD_SIZE);
while ((c=getchar())!='\n') {
if (c!=' ') temp_word[i++]=c;
else {temp_word[i]='\0';
p[j]=temp_word;
temp_word = malloc(MAX_WORD_SIZE);
i=0;j++;}
}
temp_word[i]='\0';
p[j]=temp_word;
free(temp_word);
}
【问题讨论】:
-
到目前为止你有什么?您的代码的哪些部分有问题?
-
到目前为止您尝试过什么?你不会得到帮助发布问题并说你不知道该怎么做。你需要证明你已经做出了一些努力来尝试解决这个问题。
-
读取字符串时,程序应该将单词读入一个临时的char数组中,使用malloc()分配足够的存储空间来保存单词,并将地址存储在char指针数组中。这一步怎么处理?
-
@usb-pineapple 我正在根据您想问的问题修改您的问题。