Итак, для моей проблемы, если кто-то что-то набирает, я анализирую это и сохраняю в массив символов. Я разделяю все, что пользователь вводит, пробелом. Затем я сохраняю эти токены в массив символов и распечатываю их. Но почему-то после печати первого слова выводится какая-то тарабарщина. Вот мой код:
#include <stdio.h>
#include <string.h>
#define MAXLINE 80
int main(void) {
char *args[MAXLINE / 2 + 1];
char buf[MAXLINE / 2 + 1];
scanf("%s", buf);
int i;
char *token;
token = strtok(buf, " ");
while (token != NULL) {
args[i++] = token;
token = strtok(NULL, " ");
}
//to print the array
for (i = 0; i < strlen(*args); i++) {
printf("%s\n" args[i]);
}
return 0;
}
}
. Кроме того, вы никогда не инициализировалиi
нулем перед его использованием, так что это может быть вашей проблемой. Лучше всего скопировать и вставить сюда свой фактический код компиляции, чем пытаться напечатать его снова. Нет переменной с именемbuf
. Вы, очевидно, объявили одного по имениbut
. - person paddy   schedule 29.02.2016buf
больше не используется. - person MikeCAT   schedule 29.02.2016strlen(*args)
дает длину первой строки. Это явно не то, что вы хотите. Вместо этого в этот моментi
уже содержит количество допустимых записей, хранящихся вargs
, и его следует использовать как максимальное количество итераций для этого цикла. - person kaylum   schedule 29.02.2016printf("%s\n" args[i]);
- person chqrlie   schedule 29.02.2016buf+=(token+1)
, потому чтоbuf
- это массив, и это выражение выдаст ошибку компиляции. - person MikeCAT   schedule 29.02.2016