2012-09-17 5 views
0

실행에 할당 할 때 호환되지 않는 유형이 입력되면 입력을 요청합니다.char *를 char [200]

argbuf에 입력 내용을 저장하십시오.

그런 다음, 사용 strwrd이

그러나 토큰으로 argbuf 분할, 그것이 말하는 "오류 : 문자의 할당에서 호환되지 않는 유형 *는 char [200]"

나는 ..

이유를 알아낼 수 없습니다
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
char argbuf[200];//used to store input 

char *strwrd(char *s, char *buf, size_t len, char *delim){ 
    s += strcspn(s, delim); 
    int n = strcspn(s, delim); /* count the span (spn) of bytes in */ 
    if (len-1 < n)    /* the complement (c) of *delim */ 
     n = len-1; 
    memcpy(buf, s, n); 
    buf[n] = 0; 
    s += n; 
    return (*s == 0) ? NULL : s; 
} 



int main(){ 
    fgets(argbuf, sizeof(argbuf), stdin); 
    char token[10][20]; 
    int index; 
    for (index = 0; index < 10; index++) { 
     argbuf = strwrd(argbuf, token[index], sizeof(token[index]), " \t"); 
     if (argbuf == NULL) 
      break; 
    } 
    return 1; 
} 
+0

저를 상기시켜 줘서 고마워요. 나는 항상 질문에 대답하려고 노력하지만 ... 프로그래밍에 익숙하지 않다. – mabeiyi

+0

가능한 [C에서 char *와 char \ [\]의 차이점 (http://stackoverflow.com/questions/10054271/) char-and-char-in-c) 차이점 – netcoder

+0

잘 모르겠습니다. 나는 그것을하지 않았다 – mabeiyi

답변

5

strwrdchar*을 반환하므로이 값을 char[200] 변수에 저장할 수 없습니다. 대신 char* 유형을 사용하십시오.

+0

"argbuf"는 argbuf [200]의 주소를 나타 냅니까? – mabeiyi

+0

argbuf를 배열로 선언 했으므로 char *처럼 취급하는 것이 적절합니다. 하지만 여기서, char *를 argbuf로 반환 할 수 없습니다. 왜냐하면 그것은 메모리에 고정되어 있지 않기 때문입니다. – desimusxvii

+0

다른 포인터 "char * buf = NULL"을 선언했습니다. 배열의 주소를 buf "buf = argbuf"에 할당하십시오. 그런 다음 buf를 strwrd의 매개 변수로 사용하십시오. 마지막으로 작동합니다. – mabeiyi

1

char *char[x]는 다른 종류 코드 char argbuf[200];에서 here

Here's another good resource

를 볼 당신이 그것에 대한 포인터를 할당 할 수 있도록 정적으로 할당 된 배열입니다. 어쨌든 전 세계를 앞뒤로 지나치는 이유는 무엇입니까? argbuf를 전역 변수로 사용하려는 경우 '\ t'에 대한 각각의 값이 유효한 값으로 돌아 오면 strwrd에서 직접 수정하십시오.