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