2012-09-17 46 views
0

賦值中的不兼容類型執行main,它會要求輸入。char *到char [200]

將輸入存儲在argbuf中。

然後,使用strwrd分裂argbuf爲標記

然而,它說: 「錯誤:不兼容的類型中的char分配*爲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-char-in-c) – netcoder

+0

我不知道。我沒有這樣做 – mabeiyi

回答

5

strwrd返回char*,所以您不能將此值存儲在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]是不同的類型,請參閱here

Here's another good resource

在你的代碼char argbuf[200];是靜態分配的數組,所以你不能一個指針分配給它。爲什麼無論如何要通過全球來回呢?如果你打算使用argbuf作爲全局變量,那麼直接在strwrd中修改它,如果你的每個'\ t'都返回有效的東西。