2011-01-20 3 views
0

int를 반환하는 C 함수를 만들려고하지만 프로세스에서 변수로 전달 된 char *을 채 웁니다. 내가 노력하고 무엇의 기본적인 예는 다음과 같습니다 main.c의에서C에서 함수에 전달 된 char *에 텍스트가 채워지는 방법은 무엇입니까?

int myMethod(int input, char* output, int outMaxLen) { 
    int outValue = input * 5; 
    if (out < 10) strcat(output, "A small number"); 
    else if (out < 20) strcat(output, "A medium number"); 
    else strcat(output, "A large number"); 
} 

:

실행
char* myMethodOutput; 
int myMethodInt = myMethod(2, myMethodOutput, 15); 
printf("%d %s", myMethodInt, myMethodOutput); 

화면의 정수를 표시하지만, 텍스트를하지 않습니다.

outMaxLen 변수는 char * 매개 변수가 출력 문자열을 수용 할만큼 충분히 큰지 확인하기위한 것입니다.

또한 strcat()뿐만 아니라 strcpy() 및 strncpy()도 사용하지 않았습니다. strcat()는 콘솔에 텍스트를 표시하지 않고 strcpy() 및 strncpy()는 EXC_BAD_ACCESS 메시지와 함께 디버거를 호출합니다.

Windows API에서 strcpy_s 함수를 사용하여 성공적으로 관리했으나 이제는 UNIX 상자에서 시도하고 있습니다. 나는 아마 매우 근본적인 무언가를 놓치고있다!

+0

이 코드에서 이름을 수정해야합니다. 나갔어? 너는 외계인이야? –

+1

아무 것도 반환하지 않는 것 같습니다. –

+0

분할 오류가 발생하지 않습니까? –

답변

6

포인터에 먼저 메모리를 지정해야합니다. 그렇지 않으면 메모리의 임의 영역에 쓰고있는 것입니다. 예 :

char *myMethodOutput = malloc(256); 
/* ... etc ... */ 


free(myMethodOutput); 
+1

예. 또는 문자열을 정적으로 선언 할 수 있습니다. – voodoogiant

+0

아! 당연하지! 매우 근본적인 것이 었습니다! 많은 감사합니다! – BWHazel

1
char* myMethodOutput; 

myMethodOutput = malloc(sizeof(char) * 200); //200 is example 

는 또한 myMethod()는, 참으로, 충분히 버퍼를 만들지 않습니다 "버퍼의 길이"와 같은 매개 변수를 명명 유형 void

1

이어야 해제하는 것을 잊지 마세요 .

버퍼에 메모리를 할당하지 않습니다. 적어도 샘플 코드에는 없습니다.

0

malloc() 또는 뭔가를 사용하기 전에 myMethodOutput에 대한 메모리를 할당해야합니다. 초기화되지 않은 포인터의 위치에 쓰는 것은 좋지 않습니다.

관련 문제