В
char* tok=(char *)malloc(strlen(strtok(sent, " ")+1));
вы просто выделяете часть памяти, размер которой зависит от результата strtok , но результат strtok равен не скопировано в возвращенный блок памяти
char* tok=strtok(argv," ");
while(tok!=NULL){
printf("%s\n", tok);
tok=strtok(NULL," ");
}
Если argv является вторым аргументом main , то это не char * но char **, поэтому ваш звонок неправильный
Что вы ожидали сделать?если вы хотите напечатать аргументы или программу, вы должны сделать что-то вроде:
while (*++argv != 0)
puts(*argv);
Если вы хотите получить каждое слово из группы слов, указанных в первом аргументе программы:
#include <stdio.h>
#include <string.h>
int main(int argc, char ** argv)
{
if (argc == 2) {
char* tok=strtok(argv[1]," ");
while(tok!=NULL){
printf("%s\n", tok);
tok=strtok(NULL," ");
}
}
return 0;
}
Выполнение:
pi@raspberrypi:/tmp $ ./a.out "aze qsd wxc"
aze
qsd
wxc
Как вы видите, я должен использовать строку, когда я вызываю . / A.out , иначе есть 3 аргумента, и первый аргументпросто aze
В
int i=0;
char* tok=strtok(defaultString," ");
while(tok!=NULL){
i++;
if (i==defaultInd){
printf("%s \n", tok);
break;
}
tok=strtok(NULL, " ");
}
, если defaultString , например, "11 22 33" и defaultInd значения 2 вы напечатаете 22 * 1048 *
но вы не сказали, каковы значения этих переменных