2012-04-10 5 views
0

안녕하세요, 힘들어합니다. 임의의 문자열 (길이 2에서 6)을 만들고 각 'A'에서 'Z'까지 임의의 문자를 생성해야합니다. 문제는 구조체를 char *로 사용하려고한다는 것입니다. 다음 임의의 데이터를 생성하려고 할 때 동적으로 각 구조체를 할당하십시오.임의의 길이의 임의의 길이 문자열

struct TStruct 
{ 
int ID; 
float Value; 
int a[4]; 
char *Name; 
}; 

//create pointer to TSruct 
typedef struct TStruct *ptrStruct; 

//have ptrStruct point to 10 structs 
ptrStruct structs[NUM_STRUCTS]; 

void genStruct(ptrStruct *alpha, int countID){ 
//declare variables 
//ID counter 
countID+=1; 
int i; 
int temp; 
int tempChar; 
int nameSize; 
*alpha = (ptrStruct)malloc(sizeof(struct TStruct)); 
srand(time(0)); 
//put the ID in 
(*alpha)->ID=countID; 
//random number 0 to 999.99 
(*alpha)->Value= (float)rand()/((float)(RAND_MAX)+1000)/100; 
//store 4 ints 0 to 100 into array a 
for (i = 0; i < 4; i++) { 
    //generate random number 
    temp = rand() % 100; 
    //put into the array 
    (*alpha)->a[i] = temp; 
} 
//generate a random length for the name 2 to 6 
nameSize = rand() % 4 + 2; 
char buffer[2]; 
//run a for loop based on the size of nameSize 
//THIS IS THE PROBLEM CODE!!! 
for (i = 0; i < nameSize; i++) { 
    snprintf(buffer,2, "%d",(rand() % 25)+65); 
    strcat((*alpha)->Name,buffer); 
} 
} 

도움이 될만한 의견이 있습니다. 감사합니다.

+1

당신은 질문을 잊어 버렸습니다 .... –

+0

나는 임의로 이름을 만들 수 없다. 나는 그 문제가 무엇인지 또는 정말로 그것을 묻는 법을 모른다. –

답변

0

주된 문제점 중 하나는 문자열에 공간을 할당하지 않는다는 것입니다. 초기화되지 않은 char *Name 구조가 있습니다.

솔직히 6 (심지어 8 자) 문자의 경우 배열을 구조의 일부로 할당해야합니다. 64 비트 컴퓨터에서는 포인터가 배열보다 큽니다. 32 비트 시스템에서는 여전히 데이터를 사용하는 것보다 포인터와 데이터가 더 많은 공간을 사용하게됩니다.

당신의 캐릭터 생성 루프가 너무 어색합니다. rand() 표현식은 어느 정도 합리적입니다 ('Z'가 생성되지 않고 알파벳 시작 부분에 편향됩니다). 그러나 65 대신 'A'을 사용해야하며, 문자를 해당 위치에 간단하게 할당해야합니다. 이름. snprintf()을 사용하면 각 문자에 대한 코드의 10 자리 수를 얻을 수 있습니다. 이는 원하는 것이 아닙니다.

문자열을 종료하는 것을 잊지 마세요. strcat()은 문자열이 이미 null로 끝나면 작동한다는 것을 잊지 마십시오. 당신도 그것을 고쳐주지 않았습니다.


Joachim Pileborg

당신은 일반적으로 프로그램 시작시 한 번 srand()를 호출 할 수 있도록해야하는 지금 삭제 발언에 정확한 설명을했다. genStruct() 함수를 한 번에 두 번 이상 호출하면 (그리고 두 번 이상 호출 할 경우 —도 원래의 IBM PC에서 4 MHz로 —이더라도 세 가지 호출 중 두 개 이상을 호출 할 수 있음을 보장 할 수 있습니다. 같은 초) 다음에 동일한 숫자 (시간)로 srand()이 호출 될 때마다 동일한 데이터가 생성됩니다.

관련 문제