2013-10-25 2 views
0

일부 로컬 포인터가 있고 그 전에는 두 개의 전역 포인터가 있습니다.C : 초기화되지 않은 char 포인터와 주소를 출력하십시오.

내 작업은 두 개의 전역 포인터 +/- 32 사이의 모든 바이트를 인쇄하는 것입니다. 로컬 포인터는 글로벌 포인터와 다르기 때문에 다른 것입니다.

그리고 내 질문에 처음 두 포인터 사이의 모든 바이트를 초기화하는 방법입니다? 다음은 내 시도했지만 작동하지 않습니다 :

// global scope 
char * minimum_ptr, * maximum_ptr; 

int main() 
// inside main function 
char * temp_ptr = minimum_ptr-32; 
char * add_ptr = minimum_ptr-32; 
while (temp_ptr != maximum_ptr+32) { 
    add_ptr = NULL; 
    temp_ptr++; 
} 

// getting errors 
printf("%p", (char *)(minimum_ptr)); 
printf("%p", (char *)(minimum_ptr+1)); 

내가 그것을 수정,하지만 여전히 죄송 혼란. 나는 혼란 스럽다. 필자가 원하는 것은 minimum_ptr-32와 maximum_ptr + 32 두 포인터 사이의 주소를 출력하는 것입니다. minimum_ptr과 maximum_ptr은 아직 초기화되지 않았으므로 필요한 경우 필요할 수 있습니다.

추가 : 모든 것을 처음부터 초기화하고 그 후에 할당을 수행하여 모든 것을 인쇄하고 무엇을 어디에 할당했는지 확인하고 싶습니다. 감사합니다

+2

값 'temp_ptr'을'NULL'로 설정하고 1로 설정하십시오 ('temp_ptr ++;')? – Kninnug

+0

네, 맞았습니다. 내 생각에 –

+0

나는 그것을 정정했으나 아직도 혼란 스러웠다. 나는 혼란 스럽다. 필자가 원하는 것은 minimum_ptr-32와 maximum_ptr + 32 두 포인터 사이의 주소를 출력하는 것입니다. minimum_ptr과 maximum_ptr은 아직 초기화되지 않았으므로 필요한 경우 필요할 수 있습니다. –

답변

0

우선 포인터가 올바른 주소를 표시하는지 확인해야합니다. 포인터는 배열과 다르지 않습니다 (예 : 그들은 다르지만 ..). 그래서 배열로 가정 할 수 있습니다. maximum_ptr의 주소가 minimum_ptr의 주소보다 큰 것으로 가정합니다.

uint dist = maximum_ptr - minimum_ptr; 
for (int i = 0; i < dist; ++i) { 
    minimum_ptr[i] = 'A'; 
} 

또는 당신이 사용할 수있는 표준 :

std::fill(minimum_ptr, maximum_ptr, 'a'); 

http://www.cplusplus.com/reference/algorithm/fill/

당신이 포인터를 조절할 수있는 입력이 모든 아이디어는 이상한 것을, 왜 당신을 게다가

std::fill(minimum_ptr - 32, maximum_ptr + 32, 'a'); 
+1

'std :: fill()'은 C++ 함수입니다. –

+0

우리는 C와 같은 기능을합니까? 채우기는 매우 유용하지만 C 함수가 필요합니다. 감사합니다 –

+0

memset (min_ptr-16, 'A', 32); 나는 이것을 시도했지만 작동하지 않습니다. 어떤 대안? –

관련 문제