标题:VC6.0 是不是有设置数组大小限制的功能(内详)
只看楼主
doing8
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2012-6-15
得分:0 
好像有所感悟 先操作看看 。。。
非常感谢。。。
2012-07-10 00:11
doing8
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2012-6-15
得分:0 
今天想了一会 。。。 感觉 还是不怎么好弄
因为文件中取出的记录有 3W5 条  我开辟的是 一个 p=(char*)malloc(35000*50*sizeof(char))大小的空间

p+50为一记录段操作  当我strcpy 进去一条后 后面的 就复制不进去了  也无法比较排序。
2012-07-10 21:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
你再想清楚字符串指针到底是怎么回事!

授人以渔,不授人以鱼。
2012-07-10 21:47
doing8
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2012-6-15
得分:0 
先把数据连成一串 之后 再 移动指针来取数据吗?。。。先试试 。。。
2012-07-10 21:59
Rexfield
Rank: 6Rank: 6
来 自:幻想乡
等 级:侠之大者
威 望:1
帖 子:240
专家分:484
注 册:2010-7-28
得分:0 
先假定你的记录全部是a~z。
然后申请一个长度为26的数组,表示26个字母,类型为链表。
插入记录的时候用strcmp看它的返回值确定插入的位置。
你可以用空间换时间的办法创建多维数组([26][26][26][26]......)
就像根据字符值进行寻路一样简单,但是需要的空间按照指数增长。
具体创建多少层就要你自己把握了。

If you're not failing every now and again, it's a sign you're not doing anything very innovative.
2012-07-10 23:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
看看下面的测试代码吧:

程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

const size_t blockSize = 10 * sizeof(char);         // 行大小
const size_t memorySize = 2 * blockSize;            // 2行的二维数组

void ShowMemory(const char* p, size_t size);

void main(void)
{
    char* memoryPtr = (char*) malloc(memorySize);                        // 动态申请内存
    memset(memoryPtr, 0, memorySize);                                    // 将申请所得内存用0填充
    ShowMemory(memoryPtr, memorySize);
    putchar('\n');
    printf_s("Press any key to continue...\n\n");
    _getch();

    const char str1[] = "Hello";
    const char str2[] = "world!";
    int rowIndex = 0;                                                    // 行号
    strcpy_s(memoryPtr + rowIndex * blockSize, sizeof(str1), str1);      // 将字符串str1复制到二维数组第0行
    ++rowIndex;
    strcpy_s(memoryPtr + rowIndex * blockSize, sizeof(str2), str2);      // 将字符串str2复制到二维数组第1行
    ShowMemory(memoryPtr, memorySize);                                   // 观察内存块数据

    putchar('\n');
    printf_s("%s %s %s\n",
        memoryPtr,
        (strcmp(memoryPtr + 0 * blockSize, memoryPtr + 1 * blockSize) != 0) ? "!=" : "==",
        memoryPtr + blockSize
        );

    _getch();
    free(memoryPtr);                                                    // 释放动态内存
}

// 逐个字节输出内存块的内容,显示字符及其内码
void ShowMemory(const char* p, size_t size)
{
    for (size_t index = 0; index < size; ++index, p++)
    {
        printf_s("%c (0x%02X)\n", *p, *p);
    }
}


[ 本帖最后由 TonyDeng 于 2012-7-11 03:20 编辑 ]

授人以渔,不授人以鱼。
2012-07-11 02:59
doing8
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2012-6-15
得分:0 
已经解决了。。。用malloc 申请一个 指向字符数组的指针 才好弄
要是单单 申请一个指向字符的指针 好像弄不了
2012-07-13 20:51
aside
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-7-17
得分:0 
如果申请的内存比较大的话,不要再主函数里边申请内存,容易出现栈溢出,如果在主函数外部申请内存的话,可申请的内存比在主函数里边的要大。
2012-07-17 12:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-373072-1-1.html




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

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