C言語のポインタ配列の動的割り当てに関する助けが必要です。私は、ユーザ入力から単語の文を読み込んで文字配列文字列に格納するプログラムを作成しようとしています。私はポインタchar **wordArray
の配列のこれらの単語にポインタchar *word
を保存したいと思います。ユーザ入力からのポインタの動的配列
単語の動的割り当てのための作業方法を作成するのは簡単で、ユーザー入力から文字を読み込みます。しかし、ポインタの配列にこのメソッドを適用しようとすると、やりにくくなりました。
現在の関数char **varArray
には明らかな欠陥がありますが、私の考えは「ユーザーが入力している間にポインタの配列の単語ポインタを取得しています」でした。今度は、char c
ごとに最初の単語を効果的にループします。
私の質問は、私のポインタの配列の動的メモリ割り当ての2番目の層(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;
}
ONE単語を検索する方法:
/*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://でENを.wikipedia.org/wiki/Sentence_(言語学))。 – chux
ステップ1: 'char c = EOF;' - > 'int c = EOF;' – chux
正しいです、それは行を読み、私はその目的を伝えようとしていました:実用的に。 – waahlstrand