본문 바로가기

프로그래밍/[C]

[C]포인터반환, 스택영역 힙영역 포인터를 파라미터로 주고 받을때 주의할 점들이다. 이런 함수가 있다고 치자 int* func1( ) { int array[20] = {1, };//참고로 array에는 1,0,0,0,....이 들어간다 return array; } 위의 경우 array는 stack영역에 저장되며 컴파일 타임에 메모리가 할당된다. array라는 포인터는 array[0]의 주소값을 가지고 있다. 이 array라는 값을 리턴해 버리면 array[0]의 주소는 받을수 있다. 하지만 사실 array라는 값은 함수의 스택을 가리키므로 잘못된 사용이다. 지역변수의 주소값을 반환해버리는건 잘못된 사용이다 스택이라는 것이 compile타임에 많이 결정된다고 하지만 실제로는 사이즈등은 runtime 에도 운영체제나 환경에 따라 바뀐다. i.. 더보기
[C] 디버그 모드에서는 에러가 안나는데 릴리즈에서는 나는경우 디버그모드에서는 잘 돌아가던게 릴리즈하려하니 계속 포인터가 잘못 참조 될때 나는 오류가 났다. 찾아보니 포인터 변수, 지역변수들이 초기화가 되어있어야 된다고 한다. 그래서 char string[100]같은 애들은 char string[100] = "";로 초기화 하였고 나머지 지역변수들도 초기화 햐였더니 해결되었다. 더보기
[C]strcat, 문자열 포인터 문자열을 파싱파싱 하려고 하는데 잘 안된다. 기존 문자열에 Delimiter들을 없애고 해당 문자열을 리턴 해주는게 목적이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 char* textFileParsing(char* inputString) { char outputString[50] = "outputString"; char addString[50] = "addString"; char parsingDelimters[] =" \t"; char* ptr = strtok(inputString, parsingDelimters); //strcat(outputString, addString); while (ptr != NULL) { printf("%s\n", ptr); //strca.. 더보기
[C]strtok함수 연속사용 NULL문자 보통 위와 같은 방식으로strtok를 처음 사용한다. 첫째줄 char *ptr = strtok(s1, " ");는 직관적이다. s1문자열 포인터를 입력으로 받아, 공백을 찾아서, 공백위치를 ptr값으로 반환한다. 그런데 ptr = strtok(NULL, " ");는 직관적이지 않다. ptr = strtok(NULL, " ");를 char *ptr = strtok(s1, " ");처럼 해석을 하면 NULL을 입력으로 받아 공백을 찾아서 ptr값으로 반환한다. 첫째줄을 실행할떈 공백자리에 NULL을 넣고 포인터를 반환한다. 문제가 뭐냐면 처음 호출되었을때 s1문자열 포인터의 값은 어디에 갔느냐이다. 정답은 함수 내부적으로 따로 저장 되어 있다. 그래서 while문 이후에도 문자열 위치를 잊지 않고 반복적으로.. 더보기