#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
char *args[10];
int i=0;
char str[41], teststr[41]; //two arrays declared here
const char delimiter[2]=" ";
printf("Enter command:");
scanf("%s", str);
memcpy(teststr, str, sizeof(str));
args[i]=strtok(teststr, delimiter);
while(args[i]!=NULL)
{
printf("args[%d]=%s", i, args[i]);
i++;
args[i]=strtok(teststr, delimiter);
}
return 0;
}
memcpy()是将一个数组复制到另一个数组的函数。 strtok()是将字符串拆分为令牌的函数。 我们将不断循环,直到字符串中没有剩余令牌。 每个令牌存储在'argv []'这是一个字符数组。从字符串中分离令牌时的分段错误
在第二次调用strtok时,将teststr更改为NULL。另外,不要检查args [i]是否为空,请检查我是否对argc。 – cup
http://www.cplusplus.com/reference/cstring/strtok/:'在随后的调用中,函数需要一个空指针...' –
'strok'手册页的一部分表示:“在随后的每次调用中应该解析相同的字符串,str应该是NULL。“您每次都传递'teststr',因此循环可能永远不会结束(即'args [i]'永远不会成为'NULL'。 – Evert