私はまだCでプログラミングするのが初めてです。申し訳ありませんが、この種の質問が既に尋ねられている場合は、正確に何を検索するのか本当にわかりませんでした。このポインタ配列要素にNULL値を代入できないのはなぜですか?
練習として、私は辞書をプログラミングしています。この段階では、ユーザーは単語を追加、印刷、削除することができます。単語は 'dict'と呼ばれる文字ポインタ配列に格納されます。関数 'removeWord'は、削除される単語が配列 'dict'の最後の単語に置き換えられていることを確認する必要があります。したがって、最後の単語を削除する必要がある要素にコピーし、最後の要素を削除する必要があります(つまり、NULLに値を割り当てます)。削除される単語が配列 'dict'の最後の単語である場合は削除する必要があります。
アレイの最後のものを除いて、配列 'dict'内の単語が削除されると、プログラムは実行を停止します。最後のものを除いた単語が削除されたら、最後の要素に値NULLを割り当てたいと思います。
私の質問がはっきりしていることを願っています。私は本当にあなたが提供できるヘルプに感謝します。
int numberOfWordsInDict(char **dict)
{
int i,cnt=0;
for(i=0;i<10;i++)
{
if(dict[i]!=NULL)
{
cnt++;
}
}
return cnt;
}
void addWord(char **dict, char *word)
{
int i=0;
if(numberOfWordsInDict(dict)==10)
{
printf("Dictionary is already full!\n");
}
int k=numberOfWordsInDict(dict);
dict[k]=(char*)malloc((strlen(word)+1)*sizeof(char));
strcpy(dict[k],word);
}
void printDict(char **dict)
{
int i=0;
printf("Dictionary:\n");
if(numberOfWordsInDict(dict)==0)
{
printf("The dictionary is empty.\n");
}else
{
for(i=0;i<10;i++)
{
printf("- %s\n", dict[i]);
}
}
}
void removeWord(char **dict, char *word)
{
int i,j=0;
int swapped=0;
j=numberOfWordsInDict(dict);
for(i=0;i<j;i++)
{
if(strcmp(dict[i],word)==0 && swapped==0)
{
swapped=1;
//strcpy(dict[i],dict[j-1]);
dict[j-1] = NULL;
}
}
}
at dict [j-1]エラーが発生します。
int main()
{
char wordToBeAdded[36]={};
char wordToBeRemoved[36]={};
char *dict[10]={};
char operation;
while(1)
{
printf("Command (a/p/r/q): ");
scanf(" %c", &operation);
switch(operation)
{
case 'a':
printf("Add a word: ");
scanf(" %s", &wordToBeAdded);
addWord(dict,wordToBeAdded);
break;
case 'p':
printDict(dict);
break;
case 'r':
printf("Remove a word: ");
scanf(" %s", &wordToBeRemoved);
removeWord(dict,wordToBeRemoved);
break;
case 'q':
return 0;
}
}
}
クリスチャン・デLeijer何のエラーがありますか? –
* dict [j-1]でエラーが発生します。 – lurker
そのコードのために、プログラムは動作しなくなります。実際にはエラーはありません。 –