リンクリストの配列を作成しようとしています。配列はアルファベットの文字に対応するサイズ26の各部分である。ユーザはPCのディレクトリを入力し、そのディレクトリ内の任意のフォルダまたはファイルの名前が、どの文字で始まるかに基づいてアレイ内のリンクリストに追加される。私はIT-をやろうとしてきたどのようにディレクトリから追加されたリンクリストの配列
>
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <stdlib.h>
マイノードとその宣言:
struct node{
char data[50];
struct node *next;
};
struct node* nodeArray[26];
マイアルファベット:
const char* basis[26] = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
に機能を比較する文字列配列内のリンクリストを確認してください(アルファベットと比較して)
私は、ノードを追加しても問題がどこにあるかint StartsWith(const char *a, const char *b)
{
if(strncasecmp(a, b, strlen(b)) == 0) return 1;
return 0;
}
(のprintf(「1」)は、基本的にクラッシュからコンピュータを停止することがあります):
void addNode(struct node **q,const char *d){
if(((*q)->data)==NULL){
*q = malloc(sizeof(struct node));
strncpy((*q)->data,d,50);
(*q)->next = NULL;
} else {
(*q)->next = malloc(sizeof(struct node));
*q = (*q)->next;
printf("1");
addNode(q,d);
}
}
てaddNodeを呼び出す関数を、ディレクトリすでに存在してチェックされていたコンピュータのディレクトリです:
void returner(char* directory){
int i;
DIR *dp;
struct dirent *ep;
char* tempD;
dp = opendir (directory);
struct node **z;
while ((ep = readdir(dp))){
tempD = (char*)malloc(50);
if (!strcmp(ep->d_name, ".") || !strcmp(ep->d_name, "..")){
} else {
strncpy(tempD, ep->d_name, 50);
for(i=0; i<26 ; i++){
if(StartsWith(tempD, basis[i])){
z = &nodeArray[i];
addNode(z,tempD);
print();
}
}
}
free(tempD);
}
closedir (dp);
}
印刷機能:
void print(){
int i;
struct node *temp;
for(i=0 ; i < 26; i++){
temp = malloc(sizeof(struct node));
temp = nodeArray[i];
while(temp != NULL){
printf("%s\n",temp->data);
temp = temp->next;
}
}
}
「aaa.txt」「bbb.txt」「ccc.txt」「ddd.txt」などの配列の最初のノードをスポット上に追加するとプログラムがうまくいくように見えますが、2度目のように追加しようとすると永遠に、またはPCがクラッシュするまで、「ccc.txt」が存在する場合に発生します。
、感謝これは完璧に機能します。これはC言語でこのようなことを行うのは初めてです。私はそれを修正しようとしたときに私があまりにも遠くに行きすぎてしまい、プロセスが複雑になってしまったと思います。 –
@SeanMあなたは、大抵の人が通常Cでポインターツーポインターの仕事をしようとするよりも、すぐれていました。とにかく、助けてくれてうれしいです。運が良かった。 – WhozCraig
@SeanMはこのことについても言及しているはずです: 'print'関数でメモリリークがあります。その「malloc」行にはビジネスはありません。これはJavaやC#ではありません。 – WhozCraig