C:函数为';t更新全局数组(使用strcpy/malloc)
正在尝试从Windows中的目录获取文件名。通过名为list_files的函数执行此操作。由于某种原因(或者看起来像),函数没有执行任何操作,因为每当我打印数组时,它都是空的 我以前测试过这段代码,效果很好。我一直在编码(最初这是一个较长的代码),我注意到当我以后不得不使用数组时,它返回0(无)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
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我调试过,没有看到任何奇怪的地方。@deongadoesI
用于哎呀,l
用于长度,这一直都是一样的,即:254。请打印输出。非常感谢!!你是最好的
for(i;i<n;i++){
for(i=0;i<n;i++){