我需要一些有關C中指針數組動態分配的幫助。我試圖創建一個程序,它從用戶輸入中讀取一個單詞的句子,並將這些單詞存儲在字符數組字符串中。然後我想要將指針char *word
保存到指針數組char **wordArray
中的這些字中。來自用戶輸入的動態指針陣列
爲單詞創建一個動態分配的工作方法非常簡單,它從用戶輸入中逐個字符地讀取。但是,試圖使這種方法適用於指針數組更加棘手。
當前函數char **varArray
顯然有缺陷,但我的想法是「當用戶輸入時,爲指針數組獲取單詞指針」。現在它有效地循環每個char c
的第一個單詞。
我的問題是,我如何實現我的指針數組的動態內存分配的第二層(char **varArray()
)?功能如何檢測何時調用char *word()
?
對代碼,樣式或其他錯誤的反饋當然是讚賞的。我的水平是中級初學者。
/*CREATES AND ALLOCATES DYNAMIC VARIABLE ARRAY*/
#include <stdio.h>
#include <stdlib.h>
char **varArray();
char *word();
char **varArray()
{
char **tmp=NULL;
char **wordArray=NULL;
size_t size=0;
char c = EOF;
int words=0;
while(c) {
c=getc(stdin);
if (c == EOF || c == '\n')
c=0;
if (size <= words) {
size+=sizeof(char *);
tmp = realloc(wordArray,size);
if(tmp == NULL) {
free(wordArray);
wordArray=NULL;
printf("Memory allocation failed. Aborted.\n");
break;
}
wordArray=tmp;
}
words++;
wordArray[words]= word();
return wordArray;
}
檢索一個單詞的方法:
/*GETS ONE WORD FROM USER INPUT*/
char *word()
{
char *word=NULL, *tmp=NULL;
size_t size=0;
char c = EOF;
int letters=0;
while(c) { //reads character by character
c=getc(stdin);
if (c == EOF || c == '\n' || c==' ') //remove ' ' to read all input
c =0;
if (size <= letters) { //increase and reallocate memory
size = size + sizeof(char);
tmp = realloc(word,size);
if (tmp==NULL) { //check if allocation failed
free(word);
word=NULL;
printf("Memory allocation failed. Aborted.\n");
break;
}
word= tmp;
}
letters=letters+1;
word[letters]=c;
}
/*ADD SENTINEL CHARACTER*/
letters++;
size += sizeof(char);
word = realloc(word,size);
word[letters]='\n';
return word;
}
詳細信息:看起來像代碼讀取_LINE_(字符高達''\ n''),而不是一個[句子](https://開頭恩.wikipedia.org /維基/ Sentence_(語言學))。 – chux
第1步:'char c = EOF;' - >'int c = EOF;' – chux
正確,它讀取一行,我試圖表達它的目的:它讀取一行文字,例如一個句子,務實。 – waahlstrand