| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 382 人关注过本帖
标题:自己写的一个不能正常运行的程序,请高手指教。
只看楼主 加入收藏
qalaaa
Rank: 1
等 级:新手上路
帖 子:14
专家分:8
注 册:2012-8-19
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
自己写的一个不能正常运行的程序,请高手指教。
#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <fcntl.h>

#include <sys/stat.h>


const char LIST[] =  "0123456789abcdefghijklmnopqrstuvwxyz";


int main(int argc, char *argv[])
{

    char buffer[100];

    unsigned int count = 0;

    unsigned int j,i,c;

    int fd;



    fd = open(argv[1],O_RDONLY,S_IRUSR|S_IWUSR);


    while((read(fd,&c,1) )) {

        if ((c >= '0') && (c <= '9'))

            buffer[count++] = LIST[c-'0'];


        else if ((c >= 'a') && (c <= 'z'))

            buffer[count++] = LIST[c-'a'+10];
            
            else if ((c >= 'A') && (c <= 'Z'))

            buffer[count++] = c;


        else if (c == EOF) {

            for (i = 0; i <= count; i++)

                printf("%02x ",buffer[i]);

            for (i = 0; i <= (48-count*3); i++)

                printf(" ");
   
        printf("|| ");
   
        buffer[count] = '\n';

            for (i = 0; i <= count; i++)

                printf("%c",buffer[i]);
   
        printf("\n");

        return 0;

        }


        else {

            if (count <= 3)

                count = 0;

            else {

                for (i = 0; i <= count; i++){
 
                    printf("%02x ",buffer[i]);

                    if (((i%16) == 15) || (i == count)){

                        for (j = 0; j <= (48-(i%16)*3); j++)
                            printf(" ");

                        printf("|| ");

                        for (j = (i-(i%16)); j <= i; j++)
                            printf("%c",buffer[j]);

                        printf("\n");

                    }

                }

                count = 0;

            }

        }

    }

}
   
这是我在ubuntu下自己写的一个程序,目的是把以第一个命令行参数为名字的文件里的特定的十六进制表示出来,顺便把字符也打印出来。
可是在我修改了最后一个else之后就运行不了了。我想问题只能出在倒数最后一个else里的代码里了,但是也不一定。反正我是找不出哪里有错,编译也好好的,但运行完后程序什么也不显示就退出了。请高手指教。
搜索更多相关主题的帖子: count include 
2012-10-02 13:20
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <fcntl.h>

#include <sys/stat.h>


const char LIST[] =  "0123456789abcdefghijklmnopqrstuvwxyz";


int main(int argc, char *argv[])
{

    char buffer[100];

    unsigned int count = 0;

    unsigned int j,i,c;

    int fd;



    fd = open(argv[1],O_RDONLY,S_IRUSR|S_IWUSR);     ----------》你加个条件判定吧 看文件是否被打开了 这个地方打不开 啥都是白瞎


    while((read(fd,&c,1) )) {                       -------------------》这个地方也加个吧  尽管打开了文件有了文件描述符 这个不会出多大问题
                                                                        还是加个的好

        if ((c >= '0') && (c <= '9'))

            buffer[count++] = LIST[c-'0'];              ------------》这个语句的作用是buffer[count]=list[...]  然后count+1


        else if ((c >= 'a') && (c <= 'z'))

            buffer[count++] = LIST[c-'a'+10];
            
            else if ((c >= 'A') && (c <= 'Z'))

            buffer[count++] = c;


        else if (c == EOF) {

            for (i = 0; i <= count; i++)       --------------------》这个里面的count  是没有buffer[count]和他对应的  所以你要改成
                                                 for (i = 0; i < count; i++),才行  buffer[count]是否被程序赋值可能是导致你后面对数组的引用方面都出问题了
                printf("%02x ",buffer[i]);      

            for (i = 0; i <= (48-count*3); i++)   

                printf(" ");
   
        printf("|| ");
   
        buffer[count] = '\n';   ------------》这个地方的下标如果是 count 的话就是在数组最后添加‘\n’
            for (i = 0; i <= count; i++)

                printf("%c",buffer[i]);
   
        printf("\n");

        return 0;

        }


        else {

            if (count <= 3)          ------------》如果输入的不是数字字符和 字母字符的话  count置 用文件后面的字符覆盖原先的字符不知道你是                                                            是这么想的

                count = 0;

            else {

                for (i = 0; i <= count; i++){             -》这个地方的count 同样存在问题

                    printf("%02x ",buffer[i]);

                    if (((i%16) == 15) || (i == count)){     每隔15个字符打印 3个空格 最后 1个字符难测的很哟

                        for (j = 0; j <= (48-(i%16)*3); j++)
                            printf(" ");

                        printf("|| ");

                        for (j = (i-(i%16)); j <= i; j++)
                            printf("%c",buffer[j]);

                        printf("\n");

                    }

                }

                count = 0;

            }

        }

    }

}



[ 本帖最后由 zhu224039 于 2012-10-2 17:12 编辑 ]

我要成为嘿嘿的黑客,替天行道
2012-10-02 16:48
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:20 
只看了代码,说对了的话,20分都结给我吧

我要成为嘿嘿的黑客,替天行道
2012-10-02 16:52
快速回复:自己写的一个不能正常运行的程序,请高手指教。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.071042 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved