2016-06-07 6 views
-1

을에서 구조체,하고 나는 다음과 같은 코드할당 값은 내가 게임을 짓고 있어요 C

char example[100]; 
strcpy(example, " "); 
strcat(example, player1->unitName[j]); 
strcat(example, " "); 
map->map[x][y] = example; 

내가지도 변화의 예를 함께 넣어 전체 값을 사용하여 2D 맵의 값을 변경할 때.

나는 포인터를 예제에 넣고있다.

예를 들어 주소 나 포인터가 아닌 값을 넣을 수있는 방법이 있습니까?

+0

버퍼를 할당하고 내용을 복사하십시오. 가능한 경우 strdup()가 편리합니다. – MikeCAT

+0

이 경우 strdup() 사용 방법을 보여 줄 수 있습니까? 감사합니다! – Lebanner

답변

5

각 요소에 대해 새 버퍼를 할당하고 이와 같은 내용을 복사해야합니다.

char example[100], *buffer; 
strcpy(example, " "); 
strcat(example, player1->unitName[j]); 
strcat(example, " "); 
buffer = malloc(strlen(example) + 1); /* +1 for terminating null-character */ 
if (buffer != NULL) { 
    strcpy(buffer, example); 
} else { 
    /* handle error */ 
} 
map->map[x][y] = buffer; 

시스템에서 사용할 수있는 경우 strdup()을 사용할 수 있습니다.

char example[100]; 
strcpy(example, " "); 
strcat(example, player1->unitName[j]); 
strcat(example, " "); 
map->map[x][y] = strdup(example); 
+1

+1. 기억을 해방하는 것을 잊지 마십시오. 또 다른 예는 3 차원 배열을 갖는 것입니다 :'map-> map [x] [y] [100] = "당신의 아빠는 누구입니까?". 물론 이것은 메모리 낭비로 인하여 나쁜 습관으로 간주됩니다. –

+0

@AndrejsCainikovs 실제 정의를 알지 못하는 경우 예가 범위를 벗어나는 액세스와 무의미한 포인터 대 정수 변환을 수행하는 것처럼 보입니다. 'strcpy (map-> map [x] [y], "당신 아빠는 누구입니까?");'? – MikeCAT

+0

사과. 파이썬이 너무 많습니다. 물건을 엉망으로 시작했다 :) –