免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1276 | 回复: 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