2014-12-10 2 views
-5

주어진 char (이 경우 pe pees whitespece)의 구성 요소를 인쇄해야하는데 왜 이것이 작동하지 않는지 이해하지 못합니다 (컴파일하지 않습니다) : (또는 여기 http://ideone.com/JSrqg5).Strcpy 및 strtok이 작동하지 않습니다.

오류는 다음과 같습니다

error C4996: 'strtok': This function or variable may be unsafe. Consider using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\ellly\documents\visual studio 2013\projects\consoleapplication15446\consoleapplication15446\source.cpp 18 1 ConsoleApplication15446 
error C2664: 'char *strcpy(char *,const char *)' : cannot convert argument 1 from 'char' to 'char *' c:\users\ellly\documents\visual studio 2013\projects\consoleapplication15446\consoleapplication15446\source.cpp 21 1 ConsoleApplication15446 

그리고 코드 :

#include <iostream> 
#include <cstring> 
using namespace std; 
char s[20000], *p, a[5000], separator[] = " "; 
int k = 0, i; 
void separare(); 
void afisare(); 
int main() 
{ 
    cout << "Sirul de nr:"; cin.get(s, 100, '\n'); 
    separare(); 
    afisare(); 
    system("pause"); 
    return 0; 
} 
void separare() 
{ 
    p = strtok(s, separator); 
    while (p) 
    { 
     strcpy(a[k], p); 
     k++; 
     p = strtok(NULL, separator); 
    } 
} 
void afisare() 
{ 
    int i; 
    for (i = 0; i < k; i++) 
     cout << a[i] << " "; 
} 
+0

나는 cstring 라이브러리를 포함시켜야한다고 생각한다 : #include

+0

수정 한 후에는 strcpy와 strtok을 다시 가리킨다. – Daniq

+0

당신이 말하는 "작동하지 않는"것은 무엇입니까? –

답변

0

귀하의 코드가 비록 리눅스에서 실행하는 경우, 당신은 확인해야합니다, 좋아 보인다 파일/lib 디렉토리/모듈/$ (uname -r)/build는 헤더 파일 (보통/usr/src/linux-headers-XXXX)의 유효한 위치를 가리 킵니다.
새로운 커널과 헤더를 설치 한 후에 많은 시간이 지나면이 링크가 깨지고 프로그램이 라이브러리에 링크 할 수 없으므로 컴파일되지 않습니다.
희망이 있습니다.

strcpy에 대해 [k]를 사용할 수 없지만 입력이 char *이어야하는 반면에 이것은 단일 참조를 역 참조하기 때문에. 이 경우 대신 포인터 표기법을 사용해야합니다. 즉 (a + k)가 작동합니다.