执行main,它会要求输入。
将输入存储在argbuf中。
然后,使用strwrd将argbuf拆分为标记
然而,它说“错误:char * to char [200]”
中的char *分配不兼容我无法弄明白为什么......
#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 :(得分:5)
strwrd
会返回char*
,因此您无法将此值存储在char[200]
变量中。请改用char*
类型。
答案 1 :(得分:1)
char *
和char[x]
是不同的类型,请参阅here
在您的代码中char argbuf[200];
是一个静态分配的数组,因此您无法为其指定指针。为什么要反复传递全球?如果你打算使用argbuf作为全局变量,那么只要你的每个'\ t'返回有效的东西,就直接在strwrd中修改它。