2011-05-01 6 views
0

함수 반환 유형 및 포인터에 문제가 있습니다 (미안하지만 바보 같은 질문이지만 오랫동안 C를 프로그래밍하지 않았습니다). 내가 이것을 실행하는 경우 :함수 반환 유형 및 포인터

writer.c: In function ‘parse’: writer.c:6: warning: return from incompatible pointer type 
writer.c:6: warning: function returns address of local variable writer.c: In function ‘main’: 
writer.c:11: warning: initialization makes integer from pointer without a cast 

어떤 아이디어 :

#include <stdio.h> 
#include <string.h> 
#include <strings.h> 

char *parse(char const *data) { 
    return data; 
} 

int main(int argc, const char *argv[]) { 
    char *a = "# Test"; 
    char newString = parse(a); 
    printf("%s\n", &newString); 
    return 0; 
} 

는 오류가 발생합니다?

답변

2

parse(a)char*이고 newString은 char 유형이므로 호환되지 않습니다.

char newString = parse(a); 
printf("%s\n", &newString); 

이것 :이

변경

char *newString = parse(a); 
printf("%s\n", newString); 

당신의 오류/경고에 대해서 : 함수의 반환 형식이 char*

동안

writer.c: In function ‘parse’: writer.c:6: warning: return from incompatible pointer type

당신은 const char*를 반환

writer.c:6: warning: function returns address of local variable writer.c: In function

데이터는 로컬 변수로 간주되며이 주소를 반환합니다.이 주소는 함수 내에 정의 된 경우 위험 할 수 있습니다.

‘main’: writer.c:11: warning: initialization makes integer from pointer without a cast

당신은 charchar*을 할당합니다.

그리고 보조 노트로

: const char *a = "# Test";

+0

감사 : 당신이 상수 문자열에 문자 포인터를 사용할 때, 그것은 const를 만들! 하지만 여전히 오류가 발생합니다 :'writer.c : In function 'parse': writer.c : 6 : 경고 : 포인터 대상 유형에서 한정자를 버리십시오. ' – errorhandler

+0

편집을 참조하십시오. 나는 당신이 도움이된다는 것을 알게 될 것입니다. 또한 경고는 오류가 아니지만, 당신이 그것을 다음과 같이 다루는 것이 좋습니다. :) – MByD

+0

감사합니다. 나는 어떤 경고도 갖고 싶지 않습니다. – errorhandler