스택 반환 포인터 다시 보기

921 단어
다시 한 번, 창고 복귀 지침을 보았습니다. 그래, 우리 실수에서 배워봅시다.간편하게 보기 위해서 나는 원래의 절차를 간소화했다.
#include <stdio.h>
#define MAX_URL_LEN 1024

void fun(char *pOut, int size)
{
	char str[] = "abc";
	pOut[size - 1] = '\0';
}

int main()
{
	char szOut[MAX_URL_LEN + 1] = {0};
	fun(szOut, sizeof(szOut));

	printf("%s
", szOut); return 0; }

우선, 이 프로그램의 스타일은 괜찮다. 매크로로 마귀의 숫자를 피하는 것을 알고, 변수를 초기화해야 한다는 것을 알고,fun의 출참에 사이즈가 필요하다는 것을 안다.그러나 위의 절차는 문제가 있다.pOut이 일단 fun이 끝나면 pOut에서 쓰레기 값이 됩니다. 
다음 것으로 변경합니다.
#include <stdio.h>
#include <string.h>
#define MAX_URL_LEN 1024

void fun(char *pOut, int size)
{
	char str[] = "abc";
	strncpy(pOut, str, size - 1);
	pOut[size - 1] = '\0';
}

int main()
{
	char szOut[MAX_URL_LEN + 1] = {0};
	fun(szOut, sizeof(szOut));
	printf("%s
", szOut); return 0; }

좋은 웹페이지 즐겨찾기