2014-04-03 7 views
-1

문자열을 토큰으로 분할하여 배열에 저장하려고합니다. 나는 그것을 실행할 때strtok에서 이상한 결과가 발생했습니다.

printf("crack_lines[0] : %s\n",crack_lines[0]); 
i = 0; 
char *encrypted[crack_word_count]; 
encrypted[i] = strtok(crack_lines[0]," "); 
while(encrypted[i] != NULL) 
{ 
    printf("%s\n",encrypted[i]); 
    i++; 
    encrypted[i] = strtok(NULL, " "); 
} 

하지만 출력은 다음과 같습니다

crack_lines[0] : NY'X YNRJ YT UQFD YMJ RZXNH 


1 


w 
n 

내가 정말이 인쇄되고 사람이 이유에 어떤 아이디어가 있는지 궁금 해요 이유를 모르겠어요. 모든 도움을 미리 감사드립니다. documentation of strtok에서

+1

는 디버거를 보유하고 있지 않습니다? –

+0

'crack_word_count' 란 무엇입니까? 'crack_lines' 란 무엇입니까? 'crack_lines [0]'는 문자열 상수를 가리 킵니까? (우리가 보여준 코드의 의미는 우리가 볼 수없는 코드에 달려 있습니다.) –

+3

완전한 컴파일 가능한 예제 프로그램을 게시하십시오. 그런 식으로'crack_lines'의 타입이나'crack_word_count'의 타입을 추측 할 필요가 없습니다. –

답변

1

:

이 기능은 파괴 : 그것은 str 문자열의 요소에 '\ 0'문자를 씁니다. 특히 문자열 리터럴은 이 strtok의 첫 번째 인수로 사용될 수 없습니다.

이 나를 위해 작동합니다

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char* crack_line = malloc(128); 
    strcpy(crack_line, "NY'X YNRJ YT UQFD YMJ RZXNH"); 
    const int crack_word_count = 32; 
    printf("crack_lines : %s\n", crack_line); 
    int i = 0; 
    char *encrypted[crack_word_count]; 
    encrypted[i] = strtok(crack_line," "); 
    while(encrypted[i] != NULL) 
    { 
     printf("%s\n",encrypted[i]); 
     i++; 
     encrypted[i] = strtok(NULL, " "); 
    } 
} 
+0

당신이 옳을 수도 있습니다. OP가 조용해진 이후로 말하기 힘듭니다. 그러나이 문제가 그가보고 한 결과를 어떻게 생성하는지 이해하는 데 어려움을 겪고 있습니다. –

+0

'char * crack_line = "NY'X YNRJ YT UQFD YMJ RZXNH"로 segfault를 얻습니다. 그러나 나는 이것이 문제일지도 모른다고 추측하고 있습니다 ... – Danvil

관련 문제