70,024
社区成员




#include <sys/statfs.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
//字符串转换成16进制
inline char *CharArrayToHexString(char* pOut, const char* pInput, const int nInLen)
{
const char* chHexList = "0123456789ABCDEF";
int nIndex = 0;
int i=0, j=0;
for (i=0, j=0;i<nInLen;i++, j+=2)
{
nIndex = (pInput[i] & 0xf);
pOut[i*2+1] = chHexList[nIndex];
nIndex = ((pInput[i]>>4) & 0xf);
pOut[i*2] = chHexList[nIndex];
}
//printf("pOut hexString:%s\n",pOut);
return pOut;
}
//生成随机字符串
void get_rand_str(char s[],int number,char szHex[])
{
char str[64] = "00123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int i;
char ss[2] = {0};
srand((unsigned int)time(0));
for(i=1;i<=number;i++){
sprintf(ss,"%c",str[(rand()%62)+i]);
//printf("rand:%s\n",ss);
strcat(s,ss);
}
//将8个字符换成十六进制串表示
CharArrayToHexString(szHex, s, nLen);
nLen = 2*nLen;
szHex[nLen] = '\0';
printf("szHex : %s\n",szHex);
}
int main()
{
char strTxt[4096]={0};
char s[8];
char sz[17] = {0};
int length = 0;
int i = 0;
while(1){
if(strlen(strTxt)<=4096){
get_rand_str(s,8,sz);
strncat(strTxt,sz,strlen(sz));
printf("strTxt:%s ;sz length %d;strTxt length:%d\n",strTxt,strlen(sz),strlen(strTxt));
memset(sz,0x0,20);
memset(s ,0x0,8 );
usleep(50);
}
else{
break;
}
}
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
//生成随机字符串
void get_rand_str(int number,char szHex[])
{
char str[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int len=strlen(str);
char ss[3];
szHex[0]=0;
for (int i=0;i<number;i++)
{
ss[0]=0;
sprintf(ss,"%X",str[rand()%len]);
strcat(szHex,ss);
}
printf("szHex : %s\n",szHex);
}
int main()
{
srand((unsigned int)time(0));
char strTxt[4096]={0};
char sz[20]={0};
while (strlen(strTxt)<4095)
{
get_rand_str(8,sz);
strncat(strTxt,sz,strlen(sz));
//usleep(50);
}
return 0;
}
#include <sys/statfs.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
//字符串转换成16进制
inline char *CharArrayToHexString(char* pOut, const char* pInput, const int nInLen)
{
const char* chHexList = "0123456789ABCDEF";
int nIndex = 0;
int i=0, j=0;
for (i = 0, j = 0; i<nInLen;i++, j+=2)
{
nIndex = (pInput[i] & 0xf);
pOut[i*2+1] = chHexList[nIndex];
nIndex = ((pInput[i]>>4) & 0xf);
pOut[i*2] = chHexList[nIndex];
}
//printf("pOut hexString:%s\n",pOut);
return pOut;
}
//生成随机字符串
void get_rand_str(char s[], int number,char szHex[])
{
char str[64] = "00123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int i;
char ss[2] = {0};
srand((unsigned int)time(0));
for(i = 1;i <= number;i++){
sprintf(ss,"%c",str[(rand()%62)+i]);
//printf("rand:%s\n",ss);
strcat(s, ss);
}
int nLen = strlen(s);
printf("%d: %d\n", __LINE__, nLen);
//将8个字符换成十六进制串表示
CharArrayToHexString(szHex, s, nLen);
nLen = 2*nLen;
szHex[nLen] = '\0';
printf("szHex : %s\n",szHex);
}
int main()
{
char strTxt[4096]={0};
char s[12] = {0};
char sz[20] = {0};
while(1){
if(strlen(strTxt)<=4096){
get_rand_str(s, 8, sz);
if (strlen(strTxt) + strlen(sz) > 4096-1)
break;
strncat(strTxt, sz, strlen(sz));
printf("strTxt:%s ;sz length %d;strTxt length:%d\n",strTxt, strlen(sz), strlen(strTxt));
memset(sz, 0x0, sizeof(sz));
memset(s, 0x0, sizeof(s));
//usleep(50);
}
else{
break;
}
}
}
main函数中的s也是越界的。s是8个字符空间,而你往里面放了8个字符没有'\0'的空间;
在ARM板上运行注意要字节对齐吧,因为ARM的指令和X86是不一样的。X86是复杂指令集,而arm是简单的指令集,建议以4字节方式对齐。
char sz[17] = {0};
//...
memset(sz,0x0,20);
请改为:
memset(sz, 0x00, sizeof(sz));