免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1668 | 回复: 6
打印 上一主题 下一主题

[C] 请教一个指针数组的问题(很奇怪) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-13 23:12 |只看该作者 |倒序浏览
我定义了一个指针数组char* array[100],数组的每个元素是char*类型,然后打开一个路径,读取该路径下所有文件的文件名,并赋给这个指针数组。问题是,如果路径下文件的文件名都比较长的话,只要文件多于一定数量,这些赋值就不正常了。

下面是我的代码,我每读取一个文件,显示一下array[0]的值(即第一个读到的文件名),按理说每次都应该显示一样的文件名,可是当我读到第68个文件时,array[0]显示出的却是第68个文件的部分文件名。
请教大家,这是怎么回事?谢谢各位先~~~

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

int main(int argc, char* argv[]){
        DIR* dp;
        char* array[100];
        struct dirent* entry;
        char* p;
        int i = 0;

        dp = opendir("/root/film/Vol02");

        while((entry = readdir(dp)) != NULL){
                if(strcmp(".",entry->d_name) == 0 ||
                   strcmp("..",entry->d_name) == 0)
                        continue;
                p = (char*)malloc(sizeof(char));
                p = entry->d_name;
                array[i++] = p;
                printf("%s\n",array[0]);
        }
        array = NULL;
        closedir(dp);

        return 0;
}


[ 本帖最后由 cjls1 于 2008-3-13 23:13 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-03-13 23:18 |只看该作者
p = (char*)malloc(sizeof(char));
                p = entry->d_name;
确信没写错?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2008-03-13 23:18 |只看该作者
man readdir

论坛徽章:
0
4 [报告]
发表于 2008-03-13 23:22 |只看该作者
是不是分配 p = (char*)malloc(sizeof(char)); 不够?

[ 本帖最后由 cjls1 于 2008-3-13 23:24 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-03-13 23:23 |只看该作者
楼主基本上需要学习一下什么是指针了

论坛徽章:
0
6 [报告]
发表于 2008-03-14 06:54 |只看该作者
原帖由 芙蓉 于 2008-3-13 23:23 发表
楼主基本上需要学习一下什么是指针了


的确是犯了低级错误,只分配了空间没有赋值,用strcpy(p,entry->d_name)代替p = entry->d_name错误就解决了。

论坛徽章:
0
7 [报告]
发表于 2008-03-14 10:50 |只看该作者
就分配一个字节的空间给这个名字吗??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP