免费注册 查看新帖 |

Chinaunix

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

一个关于字符串数组拷贝函数的奇怪问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-11-06 14:55 |只看该作者 |倒序浏览
在32位的机器很正常,在64位机器时,只要数组的元素数量大于7(变量a>;7)就会出错,出错所在代码:ptrptr = q; 百思不得其解,请高手指教

代码如下:
#########################################
#include <stdio.h>;
#include <string.h>;

void StrArrayCpy(char *szString[], char **outString[], int eiElements )
{
    int  size,len,i;
    char **pArray = ( char **)szString;
    char *q, *buffer ;
               
    if( !szString)
        {
                printf(\"szString is NULL\\n\";
                return ;
        }
       
    len = sizeof(int) + eiElements * sizeof(int)*3 ;
        for( i=0; i<eiElements; i++ )
        {
                len += ( strlen( szString) + 1 ) ;
                printf(\"len(%d) += ( strlen( %s) + 1 )\\n\",len,szString);
        }
       
    size = len ;
        buffer = new char[ size ] ;
        printf(\"memset( value, 0, size=%d ) ;\\n\",size);
    memset( buffer, 0, size ) ;
        union
        {
                int   value ;
                char     str[4] ;
        }val;
        val.value = eiElements;
    memcpy( buffer, (void *)(val.str), sizeof( int) ) ;
       
    q = buffer + sizeof(int);
    char *stroffset = q ;
        char **ptrptr = (char **)(q+eiElements * sizeof( int));
        q += eiElements * sizeof( int) * 3 ;
        printf(\"char **ptrptr = ( char **)q;\\n\";
        int offset = 0;
        for( i=0; i<eiElements; i++ ) {
                printf(\"for %d-1 pArray[%d]=%s\\n\",i,i,pArray);

                val.value = offset;
                printf(\"offset = %d\\n\",val.value);
                memcpy( stroffset, (void *)(val.str), sizeof( int) ) ;
                printf(\"stroffset=%d,ptrptr[%d]=%x,q=%x\\n\",*(int *)stroffset,i,&ptrptr,q);
                ptrptr = q;
                printf(\"for %d-2 \\n\",i);
                strcpy( q, pArray ) ;
                offset += strlen( pArray ) + 1;
                q += strlen( pArray ) + 1 ;
                stroffset += sizeof( int) ;
        }
        *outString = ptrptr;
}

int main()
{

int a=8;
char b[10][256];
char *p[10];
char ** pp;

for(int i=0; i<a; i++)
{
        p = b;
        sprintf(b,\"test string %d\",i);
        printf(\"p[%d]=%s\\n\",i,p);
}

StrArrayCpy(p,&pp, a);

for(int i=0; i<a; i++)
{
        printf(\"string[%d]=%s\\n\",i,pp);
}
}

论坛徽章:
0
2 [报告]
发表于 2003-11-10 14:54 |只看该作者

一个关于字符串数组拷贝函数的奇怪问题

when i make the exe file on 64 bit hpux, no problem at all.

论坛徽章:
0
3 [报告]
发表于 2003-11-13 10:33 |只看该作者

一个关于字符串数组拷贝函数的奇怪问题

我的机器是hu-ux 11i,安腾2芯片的,也是用g++编译,不过默认编译是32位的,你要加上参数-mlp64才是64代码编译,不知道你是否这样?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP