2016-11-18 1 views
0

그래서 문자열 배열에있는 문자열에서 마지막 문자를 제거하려고했습니다. 나는 약간의 검색을했는데 해결책을 찾는 행운이 없었습니다. 나는 memcpy 또는 strcpy n-1 바이트를 구현하려고 시도했지만 해결되지 않았다. 여기 char 문자열의 배열에있는 char 문자열에서 마지막 문자를 제거하는 방법

내가 새로운 문자 배열을 만들려하고 "평균"개최가

char *array[3]; 
array[0] = "avg:"; 

할 노력하고있어의 요지이다.

char *array[3]; 
array[0] = "avg:"; 

char new[sizeof(array[0])-1]; 
strncpy(new,array[0],sizeof(new)); 

나는 이런 식으로 뭔가를 할 수있을 거라고 생각

, 그러나 그것은 "@ À ‡ ¿ avg¤ã"일부 펑키 출력, 즉를 제공합니다. 어떤 도움을 주시면 감사하겠습니다.

+0

'sizeof (배열 [0])'->'strlen (배열 [0])'입니다. 그리고 NUL은'strncpy' 뒤에'new'를 끝내야합니다. – kaylum

+0

'char new [strlen (array [0])]; memcpy (new, array [0], sizeof (new)); 새로운 [sizeof (new) -1] = 0;' – BLUEPIXY

+0

아, 전 올바른 방향으로 가고 있었고, strlen과 sizeof의 사용 사이에 혼란스러워했습니다. 이것은 정확히 내가 원했던 것입니다, 고마워요. – Michael

답변

0

복사본을 올바르게 종료하지 않았으므로 문자열은 항상 '\ 0'으로 끝나야합니다.

내가 할 것이다 : 메모리 할당이 항상 문자 배열에 대한 빈 메모리를 할당합니다

char *array[3]; 
array[0] = "avg:"; 

char *new = (char *) calloc(strlen(array[0]),sizeof(char)); 
strncpy(new,array[0],strlen(array[0])-1); 

때문입니다.

범위를 벗어나기 전에 free(new)을 확인하십시오.

+0

@BLUEPIXY Fixed –

+0

@BLUEPIXY 새로운 배열과 [0] 배열이 동일한 크기이므로 오버플로가 발생하지 않습니다. –

+0

@BLUEPIXY가 수정되었습니다. 나는 네가 무슨 뜻인지 안다. 'calloc'은'new'를'\ 0 \ 0 \ 0 \ 0'으로 초기화하지만 array [0]은'avg : \ 0'이므로 컴파일러에 불만이없는 이유를 모릅니다. . –

관련 문제