-

[C언어-문자열관련] 본문

알고리즘 Note

[C언어-문자열관련]

Boogallee 2018. 1. 8. 22:34


#1


1차원 배열을 파라미터로 보낼 때는 기본적으로 call-by-reference가 되는 것 같다.


void Toknize(char str[])  <-> Toknize(str);


이렇게 main에서 호출하고 함수에서 str의 내용을 변경하면 함수에서 돌아왔을 때 str의 내용 또한 변경되어 있다.


따라서 문자열 배열을 함수에서 처리하고 그 수정된 값을 반영하려면


void Toknize(char *str[])  <-> Toknize(&str);  이러한 실수는 하지말자!


#2


char 와 int간에 변환하는데 있어서 실수하는 부분


case 1: 문자열로 "123+" 를 받았는데 123만을 다른 문자열에 저장하고 싶다


char tmp = str[i] // 1이 들어간다.

char tmp = str[i] - '0' // 틀렸다. '0'을 빼주는 것은 int에서 char로 들어갈 때이다. 지금 str[i]는 char이기 때문에 여기서 더 빼면 틀리게된다.


tmp 문자열 하나로 사칙연산으로 하는 삽질은 피하자.


적당히 char tmp[size] 로 받아서 atoi나 다른 방법을 사용하는 것이 좋은듯 하다.



case 2: char * str <--> char tmp[size], 문자열 포인터를 문자열 배열에 넣는 방법. 


1. 문자열 포인터 <- 문자열 배열 : 단순 대입(=) 가능

2. 문자열 포인터 -> 문자열 배열 : 단순 대입 당연히 불가능(루프 돌리자)

3. strcpy 사용할 때, 문자열 포인터가 param1 일 때는 반드시 메모리 할당했는지 체크!(그냥 하면 안된다) 문자열 배열은 걍 받을 수 있다. 대신 오버플로우조심.








'알고리즘 Note' 카테고리의 다른 글

[Sort]Insertion Sort  (1) 2020.03.02
[Sort] Selection Sort  (1) 2020.03.02
[Sort] Bubble Sort  (0) 2020.03.02
[Sort] Stable / Unstable 정렬  (0) 2020.03.02
C/C++ 배열 사이즈 관련  (0) 2018.01.10
Comments