2010-01-23 6 views
2
typedef struct { 
char name[10]; 
} A; 
A * inst = get_instance_of_A(); 
char *str = g_strdup (inst->name); 

마지막 줄이 컴파일되지 않습니다. 나도 운이없는 & (inst-> name)을 시험해 보았다. 오류는 다음과 같습니다.g_strduping 문자 배열 멤버 요소

오류 : char은 구조체 유형이 아닙니다.

나는 char []와 char *가 서로 다른 유형이라는 것을 알고 있습니다. 하지만 g_strdup가 C 문자열의 시작 위치를 가져 와서 속여서는 안됩니까? 다음과 같이하면 작동합니다.

char temp[10]; 
strncpy(temp,inst->name,9); 
char *str = g_strdup (temp); 

로컬 char 배열 복사본을 만들지 않고 어떻게 할 수 있습니까? 두 경우 g_strdup char 배열을 전달하는 것처럼 주먹 시나리오에서 인수를 올바르게 전달하지 않을 것 같아요.

+0

'g_strdup'의 프로토 타입을 제공하면 도움이 될 것입니다. –

+0

@Pascal : gchar * g_strdup (const gchar * str); – tur1ng

+0

프로토 타입 :'gchar * g_strdup (const gchar *);' –

답변

-2

구조체에 char 대신 gchar을 사용하십시오.

+0

그건 중요하지 않아야합니다. 경고는 표시되지만 오류는 표시되지 않습니다. – HeretoLearn

+0

'gchar'은 GLib에서'char'와 동의어입니다. – ptomato

1

당신이 생각하는 곳에 당신의 문제가 있다고 생각하지 않습니다. gcharchar은 모든 의도와 목적이 같습니다. 예를 들어,이 코드는 나를 위해 잘 작동합니다 :

#include <glib.h> 

typedef struct { 
    char name[10]; 
} A; 

A global_A = { "name here" }; 

A * 
get_instance_of_A(void) 
{ 
    return &global_A; 
} 

int 
main(int argc, char **argv) 
{ 
    const A *inst = get_instance_of_A(); 
    char *str = g_strdup(inst->name); 
    g_print("%s\n", str); 
    return 0; 
} 
+1

사실 "구조체 유형이 아닌 구조체"는'inst-> name '이 발생하는 문장에서'char *'유형을 갖는'inst'와 같은 또 다른 문제에 더 잘 설명 될 것입니다. –