吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2303|回复: 1
收起左侧

[C&C++ 转载] 请教大神 该如何修改这段代码成为二维数组?

[复制链接]
w52110 发表于 2017-6-11 11:38
请教大神 想打印出二维数组strArray[1][3] 该如何修改这段代码呢?  分割前是不清楚行和列的

void main()
{
        char *Result = "系统日期 名称 数量 库存 句柄 保留信息 #20170517 发展 500 500 550030014923 1FFA1208#20170517 发展2 100 100 54923 1ff1F208";
       

char **split(const char *src, const char *delim);
        char **strArray = split(Result, "# ");

printf("%s",strArray[1][3]);


        getchar();
}

//分割字符并返回字符数组  
char **split(const char *src, const char *delim)
{
        int size_char_p = sizeof(char*);
        char **result = (char**)malloc(size_char_p);
        char **ptmp = NULL;  
        char *src_copy;
        int index = 0;      
        int result_size = 1;
        int i = 0;
        char *p;
        if (src == NULL || delim == NULL)
        {
                *result = strdup("");
                return result;                           
        }



        //备份源字符串
        src_copy = strdup(src);

        //开始分隔第一个字符串
        p = strtok(src_copy, delim);              
        printf("%s\n\n\n结束p\n", p);

        if (p == NULL || strlen(p) == 0)            
        {
                //释放备份
                free(src_copy);
                *result = strdup("");
                return result;
        }
        //重新申请字符串指针空间
        ptmp = (char**)realloc(result, (++result_size)*size_char_p);


        if (ptmp == NULL) {
                printf("cannot realloc\n");
                free(result);
                return NULL;
        }
        result = ptmp;
        *result = strdup(p);
        index++;
        //printf("%S\n", result);

        //重新申请字符串指针的空间

        while ((p = strtok(NULL, delim)))
                {
                if (*p == '\0') {
                        continue;
                }

                //重新申请字符串指针
                ptmp = (char**)realloc(result, (++result_size)*size_char_p);
                if (ptmp == NULL) {
                        printf("cannot realloc\n");
                        //无法申请内存,则释放申请的空间
                        for (i = 0; i<result_size; i++) {
                                free(result[i]);
                        }
                        free(result);
                        return NULL;
                }
                result = ptmp;
                result[index] = strdup(p);
                //printf("%s\n\n\n", p);
                printf("%s\n\n\n", result[index]);
                index++;



        }

        //释放备份字符串
        free(src_copy);
        //把最后一个置为空
        result[index] = strdup("");
        return result;
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Rain_Personal 发表于 2017-7-22 18:27
第一:并没有看懂你的目的?
第二:你的char **split(const char *src, const char *delim)函数声明不应该放在main主函数中
第三:如果只是想要打印处来指针处的数据可以直接printf("%s",strArray);不需要按照数组的方式。前提是你的指针所指内存没有溢出。
个人观点仅供参考。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-14 20:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表