2010-01-18 2 views
0

내 프로그램에서 char * array [size]를 선언하고 문자열을 삽입한다고 말합니다. 내가 그들에게 다시 무언가를 지정하면 이전 내용을 대체하지 않지만 이전 내용을 계속 덧붙입니다. 모든 내용을 정확하게 지우거나 재설정하려면 어떻게합니까? 당신이 도착 했을 쓸 때char * array [size] 내용을 다시 설정하십시오.

void function(char* action) 
{ 
    const int myMainArrSize = 3; 
    char *myMainArr[myArrSize]; 

    char *myArrOne[] = {"String 1", "String 2", "String 3"}; 
    char *myArrTwo[] = {"Another String 1", "Another String 2", "Another String 3"}; 

    if(strcmp(action, "action1")==0) 
    { 
     for(int i=0;i<myMainArrSize;i++) 
     { 
     myMainArr[i] = myArrOne[i]; 
     } 
    } 

    if (strcmp(action, "action2")==0) 
    { 
     for(int i=0;i<myMainArrSize;i++) 
     { 
     myMainArr[i] = myArrOne[i]; 
     } 
    } 
} 
+1

이것이 C++ 인 경우'std :: string'을 사용하지 않으시겠습니까? 그럼's.clear();'. – GManNickG

+0

나는 당신에게 아이디어를 줄 것이다. 왜 당신은 두 개의 어레이를 하나의 changable과 다른 하나의 리셋을 위해 사용하지 않을 것인가? – jjj

+0

나는 C.로 재 태그를 붙이고있다. Jj : 그것은 당신이 데이터를 넣는 방법에 많이 의존한다. 처음. 그 코드를 게시 할 수 있습니까? – Potatoswatter

답변

0
memset(arr, '\0', size) 

또는 문자열을 NUL - 종료 : 당신이 포인터를 증가시키고이 계속 쓴다처럼

int n = min(strlen(str, size - 1)); 
strncpy(arr, str, n); 
arr[n] = '\0'; 
0

는 소리. 배열 어딘가에 포인터를 어딘가에 저장해야하며 문자 배열을 재설정하려면 그 포인터로 그 내용을 (memset(array, 0, size)과 같은 호출을 사용하여) 0으로 설정 한 다음 거기에 다시 쓰기 시작해야합니다.

0

새 문자열이 배열의 내용에 추가되거나 덮어 쓰여지면 데이터를 추가하는 데 사용하는 함수에 따라 다릅니다. 예를 들어 strcat()을 붙이면 strcpy()을 덮어 씁니다. 그냥 제로 길이 문자열을 "자를"하려면

는 0에 첫 번째 문자 설정에 충분하다 :

array[0] = '\0'; 
6

을 당신은이 array의 배열을 만드는

char *array[size]; 

포인터. 특히 arraysize 포인터의 배열입니다. 배열 (array[0] ~ array[size-1])의 각 요소는 char *입니다.

난 당신이 array 작동 방식을 이해한다면 도움이 될 생각 :

+-------+-------+-------+-------+ 
| [0] | [1] | [2] | [3] | 
+-------+-------+-------+-------+ 
    |  |  |  | 
    |  |  |  | 
    |  |  |  | 
    v  v  v  v 

위의 상자의 각 포인터를 나타내며, 그들이 가리키는 곳 화살표입니다. 그들을위한 스토리지는 아직 할당되지 않았으므로, 그들은 단지 "밖에"있어 아무데도 유용하지 않습니다. 그들에 대한 메모리를 만들거나 (C에서 malloc() 등, C++에서는 new[]), 기존 위치를 가리킬 수 있습니다.

당신 말 :

이 ... 거기에 몇 가지 문자열을 넣어. 내가 그들에게 다시 무언가를 지정하면 이전 내용을 대체하지 않지만 이전 내용을 계속 덧붙입니다. 모든 내용을 정확하게 지우거나 재설정하려면 어떻게합니까?

"문자열을 입력하는 방법"이 명확하지 않습니다. array[0]에 문자열을 저장한다는 의미입니까? array[size-1]? 방법? 그들에게 문자 적 ​​문자열을 지정하고 있습니까? 다음과 같이하십시오 :

그런 경우 포인터에 다시 지정하면 문자열이 추가되지 않습니다. 즉, 경우 나중에 프로그램에서 당신이 할 :

array[0] = "Another string"; 

당신이 "Another string"를 가리 키도록 포인터 array[0]를 재 할당하는, 따라서 당신이 추가 아닙니다.

간단히 말해 더 많은 코드를 볼 필요가 있으므로 포인터와 배열을 더 잘 이해해야합니다.

편집 : (!하지 오타) 귀하의 편집에 근거하여, 포인터 myMainArr[i](i=3-i=0에 대한) myArrOne 또는 myArrOne에서 해당 요소에 재 할당받을 수행 action의 내용에 따라. 따라서 인쇄 한 경우 (예 : printf("%s\n", myMainArr[0]);) 추가 할 문자열이 없어야합니다. 또한 myMainArr은 함수 function에 국한되어 있으므로 함수가 반환 될 때 파손됩니다. (덧붙여, 함수에 대한 배열 및 function의 이름 array의 당신의 선택은 질문에 대답 할 때 어렵게 모호 할 수 있도록!) 당신은 문제가있는 경우

완벽한, 최소한을 게시하시기 바랍니다 , 컴파일 할 수있는 코드는 문제를 보여줍니다.

관련 문제