2012-03-29 2 views
0
struct list{ 
    char *Name; 
}; 

void chekFC(struct list *newList){ 
    char *fC = newList->Name; 
    printf("%s\n", &fC);     //I can print it 
    if(fC[0] == '+')      //Any error?? 
    printf("Yes"); 
} 

int main(){ 
    struct list *newList = (struct list *)malloc(sizeof(struct list)); 
    newList->Name = "+abc"; 
    chekFC(newList); 
} 

나는이 프로그램을 실행할 수없는 이유는 무엇C 문자 포인터를 비교

void chekFC(struct list *newList){ 
    char *fC = newList->Name; 
    printf("%s\n", &fC);     //I can print it 
    if(fC[0] == '+') {}      // Add {} nothing run in the if condition, than the program can run 
    printf("Yes"); 
} 

을 다음 코드를 변경하는 경우는, 실행할 수 있습니까? 오류는 세그먼트 오류입니다 (코어 덤프 됨)

+0

아마도'newList-> Name'을 초기화 한 적이 없을 것입니다 ... – Mysticial

+1

이 코드 조각에서 잘못된 점을 말하는 것은 불가능합니다. 문제를 나타내는 가장 작은 완전한 프로그램을 게시하십시오. – Spire

+0

전체 코드, 특히'newList-> Name '을 할당하는 비트를 표시합니다. –

답변

1

의미한다.

printf("%s\n", &fC); 

당신은 내가 당신은 매우 명확 C 포인터를 이해하지 못하는 생각

printf("%s\n", fC); 

로 변경해야합니다. & fC는 fC와 매우 다르므로 "% p"로 인쇄하여 볼 수 있습니다.

printf("fC %p, &fC %p\n", fC, &fC); 

& fc에가 fc에의 주소, fc에는 "+ ABC"문자열의 주소입니다. 나는 그것이 당신을 도울 수 있기를 바란다. 그러나 나는 C 포인터를 배우기 위해 책을 읽어야한다고 제안한다.

+0

고맙습니다 매우 많이 –

+0

맞습니다. C 포인터에 대한 개념이 매우 형편 없습니다. –

1

newList->Name이 할당 되었습니까?

+0

그렇게 생각합니다. newList에서 Name을 출력 할 수 있기 때문입니다. –

+0

by printf ("@@ % s \ n", & newList-> Name); –

+0

@Andreas, newList-> Name = "+ abc"라인이 아닙니다; 텍스트 세그먼트에 할당? –

1

newList-> 이름이 할당 된 적이 없습니다.

+0

내가 이미 할당 한 것 같아 –

+0

@dexametason, newList-> Name = "+ abc"라인이 아님; 텍스트 세그먼트에 할당? –

+0

그는 수정하지 않으므로 괜찮습니다. 포인터가 유효해야합니다. – dragonx

1

지속적으로, 내가 주장을 사용하는 것이 좋습니다 앞으로 이러한 문제를 방지하려면 :

assert(newList); 
assert(newList->Name); 
0
printf("%s\n", &fC); 

잘못, 당신은 아마 당신의 코드에 한 가지 문제가 있습니다

printf("%s\n", fC); 
+0

printf ("% s \ n", fC)로 변경하면 프로그램을 실행할 수 없습니다. –

+0

세그먼테이션 결함 (코어 덤프) –

+0

'malloc'의 반환 값을 캐스팅했다는 이유는 올바른'#include '가 없기 때문일 것이다. –