coglyi   4년 전

인터넷에 검색을 열심히 해봤는데 제가 원하는 속시원한 답변이 없더군요..

지금 군인인데 학교 복학전에 까먹은 C언어 다시 공부하고 들어가려고 하는데 좀 힘이드네요

int num = 10;
int* ptr = &num
ptr은 num의 주소를 담고 있고 *ptr을 하면 num의 주소에 접근하여 그 값을 지목한다 정도로 알고 있는데요 (틀렸다면 지적해주세요.)

문자열 포인터를 사용하는데 있어서 애로사항이 있습니다.

char* tmp = "OOOXXXOXOXOXOXOXOXX"

라고 하면 tmp에는 저 문자열의 시작 주소가 담기는 것이고 printf("%s",tmp)라고하면 tmp의 시작 주소열에 해당하는 부분 부터 널 문자를 만날때까지 출력하는 것으로 이해하고 있는데요, *tmp 를 실행하게 된다면 제 생각은 위의 숫자를 다룰때 처럼 tmp의 주소에 접근하여 그 주소의 첫번째 값을 의미한다 인데요, 실제로는 이게 실행이 되질 않습니다. 뭐..*(tmp+1) 은 tmp배열의 1번째 인덱스를 출력한다 이런 식입니다. 

1. 왜 실행이 안되는지 제가 잘못 알고있는 부분에 대해서 알려주세요

2.검색을 하다가 아래 코드를 발견했는데요 여기서 for문에서 *str이 의미하는바가 무엇인가요

for(;*str;str++) printf("%s\n",str);
printf("%s",*str);

djm03178   4년 전

1. 구체적으로 어떻게 하셨는지를 적어주셔야 합니다. 제대로만 썼다면 안 될 이유가 없습니다. *tmp는 char형이므로 %c를 썼다면 올바르게 O가 출력이 될 것입니다.

2. 널 문자는 값이 0이고, C에서는 0은 false, 0 이외의 값은 true로 간주하기 때문에 현재 str가 가리키는 값이 널 문자가 아닌 동안 루프를 돌라는 의미입니다.

coglyi   4년 전

감사합니다 제대로 안써서 문제가 생겼었습니다.

제 질문은 그저 char*tmp 에서 *tmp를 썼을때 왜 실행이 안되는지에 대한 것이었는데, 서식문자를 %c가아닌 %s로 써서 문제가 생기고 있었던 거였습니다.

실행이 안되길래 제가 *tmp를 잘못 알고 있는 줄 알았습니다.

댓글을 작성하려면 로그인해야 합니다.