0

执行main,它会要求输入。

将输入存储在 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;
}
4

2 回答 2

5

strwrd返回 a char*,因此您不能将此值存储在char[200]变量中。改用char*类型。

于 2012-09-17T16:56:28.607 回答
1

char *并且char[x]是不同的类型,请参见此处

这是另一个很好的资源

在您的代码char argbuf[200];中是一个静态分配的数组,因此您不能为其分配指针。为什么要来回传递全局?如果您打算将 argbuf 用作全局变量,那么如果您的 each for '\t' 返回有效的内容,则只需在 strwrd 中直接修改它。

于 2012-09-17T17:23:34.273 回答