#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] нулевым, проверьте i на argc. – cup
http://www.cplusplus.com/reference/cstring/strtok/: 'В последующих вызовах функция ожидает нулевой указатель ...' –
Часть man-страницы 'strok' говорит:« В каждом последующем вызове, который должен анализировать одну и ту же строку, str должен быть NULL. ". Вы пропускаете 'teststr' каждый раз, поэтому цикл, скорее всего, не закончится (т.е.' args [i] 'никогда не будет' NULL'. – Evert