2011-10-17 2 views
1

char 포인터를 char로 변환합니다.C에서 char 포인터를 char로 변환하는 방법 VMS를 엽니 다.

다른 주제의 코드를 따랐지만 나에게 효과가없는 것처럼 보입니다. Open VMS Ansi C 컴파일러를 사용하고 있습니다. 나는 다른 플랫폼 과 어떤 차이가 있는지 알지 못합니다.

main(){ 

char * field = "value1"; 
char c[100] = (char)field; 

printf("c value is %s",&c); 

}

이의 출력은 당신이 날 도울 수 있기를 바랍니다 내가

c value is value1 

을 기대하고 나를 위해 예기치 않은

c value is 

입니다.

+0

안녕 얘들 아, 고마워. 그러나이 시나리오에서는 포인터 char를 char로 변환하는 conv_ptr_str 함수와 같은 자체 함수를 만들 수 있습니까? say char * field = "value1"; char c [100] = (char) field; char c = conv_ptr_str (field); 자원을 다시 사용할 수 있도록하려면 이것이 유일한 방법입니다. –

답변

4
strcpy(c, field); 

당신은 c가 NUL 종료 자 포함 field의 모든 문자에 대한 공간이 있는지 확인해야합니다. 이 경우에는 그렇지만 일반적으로 if 확인이 필요합니다.

편집 : C에서는 함수에서 배열을 반환 할 수 없습니다. 저장 용량을 할당해야하지만 길이를 모르는 경우 malloc을 사용하십시오. 예컨대 :

size_t size = strlen(field) + 1; // If you don't know the source size. 
char *c = malloc(size); 

그런 다음, 이전과 동일한 strcpy 전화를 사용합니다.

0

C에서 char 유형은 문자열이 아닌 단일 문자를 보유합니다. char c[100]; 길이 100 char를 할당하지 않으며, 이는 각 바이트 길이 어레이 (100)의 연속 char의 할당하고, 그 배열는 문자열을 보유 할 수있다.

char의 배열을 char *이 가리키는 위치에있는 char 값으로 채우는 것이 좋습니다. 당신이 문자열 (이 경우 더 나은) c에 맞는 알고 있기 때문에 strcpy()을 사용 .. 또는

strncpy(c,field,100); /* copy up to 100 chars from field to c */ 
c[99] = '\0';   /* ..and make sure the last char in c is '\0' */ 

: 그렇게하려면, 당신은 strncpy() 또는 여러 가지 다른 기능을 사용할 수 있습니다

strcpy(c,field); 

.. 또는 :

snprintf(c,100,"%s",field); 
+1

'strncpy()'는'strcpy()'의 안전한 버전이 아닙니다. ('snprintf()'는'sprintf()'의 안전한 버전입니다). 'strncpy()'는 대상 버퍼를 종료하지 않고 (즉, 문자열을 포함하지 않음) 남겨 둘 수 있습니다. 단 하나만 필요할 때 불필요하게 여러 개의 '\ 0'문자로 채울 수 있습니다. 목표 버퍼가 충분히 크다는 것을 확인한 후에'strcpy()'를 사용하는 것이 더 낫다. –

+0

@KeithThompson 위의 예에서 문자열은 명시 적으로 null로 끝납니다. 소스 문자열의 길이가 알려지지 않은 경우'strlen()'을 호출하기 전에'strcpy()'가 반드시 빠르지는 않을지라도, 여분의 널 문자를 추가 할 가능성이 있습니다. – Dmitri

관련 문제