Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:函数为';t更新全局数组(使用strcpy/malloc)_C_Arrays_Windows_Function_Malloc - Fatal编程技术网

C:函数为';t更新全局数组(使用strcpy/malloc)

C:函数为';t更新全局数组(使用strcpy/malloc),c,arrays,windows,function,malloc,C,Arrays,Windows,Function,Malloc,正在尝试从Windows中的目录获取文件名。通过名为list_files的函数执行此操作。由于某种原因(或者看起来像),函数没有执行任何操作,因为每当我打印数组时,它都是空的 我以前测试过这段代码,效果很好。我一直在编码(最初这是一个较长的代码),我注意到当我以后不得不使用数组时,它返回0(无) void list_files(); char *filesList[0][254]; int i = 0, n = 0, l = 254; char directory[] = {"C:/Users

正在尝试从Windows中的目录获取文件名。通过名为list_files的函数执行此操作。由于某种原因(或者看起来像),函数没有执行任何操作,因为每当我打印数组时,它都是空的

我以前测试过这段代码,效果很好。我一直在编码(最初这是一个较长的代码),我注意到当我以后不得不使用数组时,它返回0(无)

void list_files();

char *filesList[0][254];
int i = 0, n = 0, l = 254;
char directory[] = {"C:/Users/test/Downloads/test/"};

int main()
{
    list_files();
}

void list_files()
{
    DIR *d;
    struct dirent *dir;
    d = opendir(directory);
    //Determine the number of files
    while((dir = readdir(d)) != NULL) {
        if (strcmp(dir->d_name, ".") != 0 && strcmp(dir->d_name, "..") != 0)
            n++; // determine, count array size based on files
    }
    rewinddir(d);
    //Put file names into the array
    while((dir = readdir(d)) != NULL) {
        if (strcmp(dir->d_name, ".") != 0 && strcmp(dir->d_name, "..") != 0)
        {
            filesList[i][l] = (char*) malloc(sizeof(char) * 100); // allocate memory
            strcpy(filesList[i][l], dir->d_name); // put file names in to array
            i++; // do +1 to read each single array line
        }
    }
    rewinddir(d);
    printf("%s",n);
    for(i;i<n;i++){
        printf("%s/n", filesList[i][l]);
    }
}
void list_files();
char*filesList[0][254];
int i=0,n=0,l=254;
char目录[]={“C:/Users/test/Downloads/test/”};
int main()
{
列出_文件();
}
无效列表_文件()
{
DIR*d;
结构方向*dir;
d=opendir(目录);
//确定文件的数量
而((dir=readdir(d))!=NULL){
如果(strcmp(dir->d_name,“.”)=0和&strcmp(dir->d_name,“…”)!=0)
n++;//根据文件确定、计算数组大小
}
倒带器(d);
//将文件名放入数组中
而((dir=readdir(d))!=NULL){
如果(strcmp(dir->d_name,“.”)=0和&strcmp(dir->d_name,“…”)!=0)
{
filesList[i][l]=(char*)malloc(sizeof(char)*100);//分配内存
strcpy(filesList[i][l],dir->d_name);//将文件名放入数组
i++;//do+1读取每个数组行
}
}
倒带器(d);
printf(“%s”,n);

对于(i;i使用
char*fileList[254]
声明254个指针的数组。
对(n=0;n

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>

void list_files();

char *filesList[254];
int i = 0, n = 0, l = 254;
char directory[] = {"./"};

int main()
{
    list_files();
}

void list_files()
{
    DIR *d;
    struct dirent *dir;
    d = opendir(directory);
    //Put file names into the array
    while((dir = readdir(d)) != NULL) {
        if ( ( i < 254) && ! ( strcmp(dir->d_name, ".") == 0 || strcmp(dir->d_name, "..") == 0))
        {
            filesList[i] = malloc( strlen ( dir->d_name) + 1); // allocate memory
            strcpy(filesList[i], dir->d_name); // put file names in to array
            i++; // do +1 to read each single array line
        }
    }
    for(n = 0; n < i;n++){
        printf("%s\n", filesList[n]);
    }
    for(n = 0; n < i;n++){
        free ( filesList[n]);
    }
}
#包括
#包括
#包括
#包括
作废列表_文件();
char*filesList[254];
int i=0,n=0,l=254;
char目录[]={“/”};
int main()
{
列出_文件();
}
无效列表_文件()
{
DIR*d;
结构方向*dir;
d=opendir(目录);
//将文件名放入数组中
而((dir=readdir(d))!=NULL){
如果((i<254)和&!(strcmp(dir->d_name,“.”)==0 | | strcmp(dir->d_name,“…”)==0))
{
filesList[i]=malloc(strlen(dir->d_name)+1);//分配内存
strcpy(filesList[i],dir->d_name);//将文件名放入数组
i++;//do+1读取每个数组行
}
}
对于(n=0;n
除了注意到的其他问题外,您从未在此代码中重置
i

while((dir = readdir(d)) != NULL) {
    if (strcmp(dir->d_name, ".") != 0 && strcmp(dir->d_name, "..") != 0)
    {
        filesList[i][l] = (char*) malloc(sizeof(char) * 100); // allocate memory
        strcpy(filesList[i][l], dir->d_name); // put file names in to array
        i++; // do +1 to read each single array line
    }
}
rewinddir(d);
printf("%s",n);
for(i;i<n;i++){  
    printf("%s/n", filesList[i][l]);
}

您能用文字描述一下您期望的
char*filesList[0][254]
给你什么?在那一刻,什么都没有。后来,情况发生了变化。考虑进一步阅读代码。@brhans也..我在调试代码时出错,因为数组大小将由函数定义。@deongadoes我调试过,没有看到任何奇怪的地方。@deongadoes
I
用于哎呀,
l
用于长度,这一直都是一样的,即:254。请打印输出。非常感谢!!你是最好的
for(i;i<n;i++){  
for(i=0;i<n;i++){