我正在制作一个小程序,用户输入的命令如" print 1 2"或"打开文件1"并且为了处理用户想要做的事情,我尝试使用strtok
在每个空间分解用户输入。我的问题是,对于以下代码:
void tokenize(char string[100],char tokenized[10][MAX_CHARS]){
char delims[] = " "; /*Delimitere is a space so tokenize when a space occurs*/
char *result = NULL;
int count = 0;
result=strtok(string,delims); /*Tokenize the string*/
while(result!=NULL && count<10){
tokenized[count++][MAX_CHARS] = result; /* This is where I get the error */
result= strtok(NULL,delims);
}
}
我收到此错误:
stringapi.c: In function ‘tokenize’:
stringapi.c:33:33: warning: assignment makes integer from pointer without a cast [enabled by default]
我一直试图解决这个问题一段时间没有运气
我试过了tokenized[count++] = result;
,但这给了我以下错误:
stringapi.c:33:22: error: incompatible types when assigning to type ‘char[80]’ from type ‘char *’
我的最终目标是,如果用户输入&#34;打开newfile.txt&#34;我想要一个数组在哪里
array[0]
已打开,array[1]
是newfile.txt,我可以据此处理。
答案 0 :(得分:5)
以下一行:
tokenized[count++] = result;
尝试分配给一组字符。 You can't do that,您必须使用strncpy()
:
strncpy(tokenized[count++], result, MAX_CHARS);
最后,我建议您更喜欢strtok_r()
到strtok()
。
答案 1 :(得分:0)
您需要使用strcpy
(或更好strncpy
)来复制字符串。否则你只是将一个指针指向一个数组。
答案 2 :(得分:0)
你混淆了两种方法。一种方法是将输入字符串中的所有内容复制到解析版本的不同位置。一种方法是解析后的版本只是指向保存原始输入字符串内存的内存的一堆指针。那条tokenized[...] = result
线试图采用第二种方法;您正在使用的数据结构表明了第一种方法。
如果您想使用第一种方法,请执行strncpy而不是仅仅分配给tokenized。如果要使用第二种方法,请将tokenized更改为char *。
数组我会推荐第一种方法,因为它的价值。