나는이 문제를 가로 질렀다. 나는 문자열을 구조체로 변환하는 함수를 구현했다. 나는이 구조를 가지고 :C에서 구조체에 대한 포인터를위한 realloc()
typedef struct {
unsigned a, b;
unsigned c, d;
} struct_t;
함수의 제목은 다음과 같다 : 생성 된 새로운 구조에 RETVAL 페이지 포인터 \
struct_t * string_to_struct (char * g)
; \ retval 변환에 실패하면 NULL을 반환합니다. 변환은 "5 8 10 10"(segmentation fault
오류가 발생했습니다)과 같은 문자열에는 성공하지 못하지만 "5 6 6 7"또는 "4 5 6 8"과 같은 문자열에는 성공합니다. 문제는 구조 p에 대한 포인터에 대한 메모리 할당 내에 있다고 생각합니다. 나는 먼저이 방법으로 페이지에 대한 메모리를 할당에 대한 생각 :
p = (struct_t*)malloc(sizeof(struct_t));
을 그리고 나는 그것이 문자열을위한 공간 만들기에 의한 P 메모리를 재 할당에 대한 생각 (일부 문자열이 약 8 바이트 모든 것이 잘 작동하지만 문자열이 약 10 바이트라면 segmentation fault
을 얻습니다. 왜냐하면 위의 p와 같이 메모리를 할당함으로써 8 바이트의 공간을 차지하기 때문입니다. realloc()
함수를 사용하여 메모리를 확장하여 구조체를 넣고 문자열의 크기를 지정하기 때문에, 그러나 나는 그것을 올바르게하는 방법을 모른다.
struct_t * string_to_struct (char * g){
struct_t * p; /* pointer to new structure*/
int n;
n = sizeof(g);
if(sizeof(g) > sizeof(struct_t))
p = (struct_t*)malloc(n*sizeof(struct_t));
else
p = (struct_t*)malloc(sizeof(struct_t));
if(g[0] == '\0') /* trivial */
return NULL;
else
(*p).a = g[0];
(*p).b = g[2];
(*p).c = g[4];
(*p).d = g[6];
if((*p).a <= (*p).c && (*p).b <= (*p).d) /* check, the elements of the structure must satisfy those relations.*/
return p;
else
return NULL; /* convertion not successful */
}
그러나 그것은 작동하지 않습니다 : 은 여기 내가 realloc()
를 사용하지 않는 기능을 구현하기 위해 시도하는 방법이다. 모든 도움을 미리 감사드립니다.
struct_t, 언어 태그 없음 (C 또는 C++), 코드 없음, 실제 질문 없음에 대한 정의가 없습니다. 미안하지만 이것은 정말로 불분명하고 곧 닫힐 가능성이 있습니다. –
할당 (불필요한 캐스트와 별도)이 좋습니다. 이 오류는 구문 분석에서 가장 많이 발생합니다. 'string_to_struct' 함수의 전체 본문을 보여줍니다. – dbush
'sizeof (g)'는'strlen (g)'와 매우 다릅니다. –