#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 []'中,这是一个char数组。
答案 0 :(得分:0)
我不确定这是否会为您删除段错误,但您没有正确调用strtok
。您只能在第一次调用时传递分隔符。在随后的调用中,第二个参数应为NULL
。你当前称之为的方式必将为你打破局面。
答案 1 :(得分:0)
while循环将无限运行,因为arg[i]
是第一个令牌继续进行,而条件传递导致无限。
由于您使用scanf()
读取字符串,如果字符串是多字,则无法读取,使您的代码无法解析所有令牌,只能解析第一个字。我建议您使用下面的fgets()
来阅读多字符串
if (fgets(str, sizeof str, stdin) == NULL) {
; // handle EOF
}
以下是工作代码ideone。
答案 2 :(得分:0)
请按
更改while..loop
while(args[i]!=NULL)
{
printf("args[%d]=%s", i, args[i]);
i++;
args[i]=strtok(NULL, delimiter);
}
您不需要每次都在teststr
中传递strtok
,否则while...loop
会进入无限循环。