문자열과 파일을 구분해야합니다. String = "21:12:36 14:45:25 08:17:24" strtok()을 수행하고 모든 토큰을 배열에 넣으면 모든 것이 잘 작동하지만 strtok()을 두 번째로 수행하면 모든 것이 엉망이됩니다. 예 :왜 strtok()은 심지어 전달하지 않은 문자열을 분할합니까?
char *p = strtok (code, " ");
while (p != NULL){
dal[i++] = p;
p = strtok (NULL, " ");
}
출력 :
dal[0] = 21:12:36
dal[1] = 14:45:25
dal[2] = 08:17:24
내가 배열 DAL 의 사본을, 나는 두 번째 strtok를 수행 할 때 난 내 원래 문자열 (코드)와 DAL의 내 사본을 변경 심지어 strtok()에만 dal 배열을 전달합니다. dal을 LinkedList에 보내려고했지만 두 번째 strtok 후에도 LinkedList가 변경되었습니다.
선언 :
char *dal[20], *dalcopy[20];
//copying below
for(int k = 0; k<i; k++){
dalcopy[v] = dal[k];
v = v+1;
}
예 :
for (int j = 0; j<i; j++){
char *o = strtok(dal[j], ":");
while (o != NULL){
for(int h = 0; h<3; h++){
if(h == 0){vienas[b].Hour = atoi(o);}
if(h == 1){vienas[b].Min = atoi(o);}
if(h == 2){vienas[b].Sec = atoi(o);}
o = strtok (NULL, ":");
}
b = b+1;
}
LinkedList의 예 :
char *p = strtok (code, " ");
while (p != NULL){
dal[i++] = p;
put(head, p); //puts each element to list end
p = strtok (NULL, " ");
}
printf("%s\n", show_by_index(&head, 0)); **Output == 21 after second strtok**
출력 :
original string = 21
dal[0] = 21
dal[1] = 14
dal[2] = 08
dalcopy[0] = 21
etc...
왜 이런 일이 발생하고 있습니까?
중요한 질문이 부족한 것 같습니다. 'dal'과'dalcopy'는 어떻게 선언되어 있습니까? *'dalcopy'는 어떻게 만들어 지나요? 포인터 배열을 복사해도 해당 포인터가 가리키는 데이터는 복사되지 않습니다. 나는'dalcopy'가 별칭의 배열이라고 생각합니다. –
'char * dal [20], * dalcopy [20];'- dal 선언 'dalcopy [0] = dal [0]; ' –
[mcve]를주십시오. 너무 많이 표시되지 않습니다. –