- 论坛徽章:
- 0
|
在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);
}
} |
|