2014-02-19 1 views
0

그래서이 코드 블록의 마지막 줄에이 경고가 나타납니다.경고 : 캐스팅없이 정수에서 포인트가 지정됩니다.

int main(int argc, char **argv) 
{ 
while(1) { 
char buffer[400]; 
char str; 

if(strcmp(argv[1],"start") == 0) 
    { printf("myshell: process has started \n"); 
      int i=0; 
      while (str = strtok(buffer," ") == NULL) {   
      argv[i] = str; //**This line causes the warning! 

내가 str을 선언하는 방법 때문입니까? 그게 잘못된거야? 고맙습니다!

제목에서 알 수 있듯이 경고는 경고입니다. 할당시 캐스트없이 정수에서 포인트가 지정됩니다..

+0

후 오류하시기 바랍니다. – Roecrew

+0

'char'를'char *'에 할당하고 있습니다. 그리고 이것이 당신이 얻는 유일한 경고/오류는 아닙니다. 이전 줄은 똑같이 나쁘다고 생각하는 것을하지 않습니다. 넌 p set이가 없어. – WhozCraig

+0

@WhozCraig 어떻게 해결할 수 있습니까? char * str에 char str을 만들려고했으나 그렇지 않습니다. 또한 더 많은 오류에 대해 어떻게 말합니까? 나는 내 코드를 컴파일하고 있는데, 내가 알아야 할 유일한 코드이다. – user3295674

답변

0

캐스팅 오류가 발생할 수있는 방법을 모르지만 코드에 오류가 표시됩니다. strtok에 대한 첫 번째 호출은 버퍼를 전달하기 때문에 token'izer를 초기화합니다. 두 번째 호출은 다음 토큰을 찾길 원한다고 가정하면 동일한 버퍼 대신에 null 값을 가져야합니다.

Look at this example...

그래서 당신이 원하는 무엇인가 :

... 
int i=0; 
str = strtok(buffer, " "); 
do {   
    argv[i] = str; //**This line causes the warning! 
    ... 
} while (str = strtok(NULL, " ") != NULL); 
+0

... "char str;"을 수정해야합니다. WhozCriag는 "char * str"을 언급합니다. –

+0

마지막 줄에 (str = strok (NULL, "")) 여분의 괄호가 필요합니까? 또한, 이것도 작동합니까? int i = 0; str = strtok (buffer, ""); while (str == NULL) { argv [i] = str; i = i + 1; } – user3295674

+0

예 아니요. "while (str == NULL) {..."은 버퍼에 적어도 하나의 공간이 있다고 가정 할 때 루프를 입력하지 않습니다. strtok에 대한 첫 번째 호출은 null이 아닌 첫 번째 문자열에 대한 포인터를 반환합니다. 그래서 나는 당신이 "while (str! = NULL) {..."을 의미한다고 생각합니다. –

0

strtok()의 프로토 타입 char *strtok(char *str, const char *delim);이다 strtok()의 리턴 값은 따라서 str의 유형을 char * 있어야 char *이다.

무엇보다 str = strtok(buffer," ") == NULLstr = (strtok(buffer," ") == NULL)을 의미하며 아마도 원하는 것은 아니 겠지만 (str = strtok(buffer," ")) == NULL을 의미합니다.

관련 문제