2011-01-31 4 views
3

C에서 문자열 배열에 새 요소를 추가하려면 어떻게해야합니까?C에서 문자열 배열에 요소를 추가하는 방법은 무엇입니까?

+0

어레이가 이미 꽉 찼습니까? 배열의 크기를 늘리려고하십니까? – Davidann

+0

이것 좀 봐, http://stackoverflow.com/questions/4694401/how-to-replicate-vector-in-c/4694762#4694762 –

+0

그래서 문자열의 배열, 또는 문자열 (문자 배열)? 비슷하지만 두 경우 모두 함정이 있습니다. – PeterK

답변

1

배열을 확장하려면 메모리를 다시 할당해야합니다. realloc을 확인하십시오.

5

문자열 인 경우 strcat() (some docs) 만 사용하면됩니다. 메모리를 허용 한만큼만 확장 할 수 있다는 것을 조심하십시오. 다른 포스터가 말했듯이 realloc() 일 수도 있습니다.

-1

배열 호출에 따라 다릅니다.

고정 길이 배열을 통계적으로 할당 한 경우 i- 번째 요소에 데이터를 복사 할 수 있습니다. 동적 배열을 사용한 경우

char foo[25][25]; 
strcpy(foo[1], "hello world"); /* "puts" hello world in the 2nd cell of the array */ 

먼저 여전히 공간이 있음을 보장해야 otherwize은 다음 항목을 같은 방법으로 넣어 메모리를 할당합니다.

+0

'strdup (foo [1], "hello world");','foo [1]'은 항상 인덱스 1에 있어야합니까? 배열에 5 개의 요소가 있다고 가정하면'foo [6]'을 사용할 것입니까? thanks –

+0

@James : '0'에서 '24'까지 요소를 수정할 수 있습니다. 그렇지 않으면 메모리의 잘못된 영역에 쓸 수 있습니다. 이로 인해 데이터가 손실되거나 프로그램이 중단 될 수 있습니다. 'foo [1]'은 두 번째 배열 요소 인 두 번째 문자열에 대한 포인터입니다. –

+0

어디서 'strdup'을 얻고 있습니까? 그것은 표준 버전처럼 보이지 않습니다. – bstpierre

2

C의 문자열은 문자 배열로 구성됩니다. printf 호출을 사용하여 문자열을 올바르게 인쇄하려면 NULL 문자 (\ 0)로 끝나야합니다.

새 요소를 추가하려면. 문자의 끝 부분에 NULL 문자로 이동 & 새 문자로 바꾸고 그 뒤에 NULL을 넣습니다. 이것은 새로운 문자에 충분한 공간이 이미 있다고 가정합니다.

char str[100]; 
char new_char = 'a'; 
int i = 0; 
... 
// adds new_char to existing string: 

while(str[i] != '\0') 
{ 
    ++i; 
} 
str[i++] = new_char; 
str[i] = '\0'; 
+0

그 코드가 어떻게 작동 할 수 있는지 이해할 수 없다. 코드는 마지막 요소 앞에 배열/문자열을 null로 끝내는 것처럼 보인다. –

+0

컴파일러에서 시도해보십시오 :이 문맥에서'str [i ++] = new_char;'는'str [i] = new_char; 나는 의심의 여지가 있다면 http://stackoverflow.com/q/4865599/191776을 참조하십시오. –

관련 문제